通俗易懂的ref和out区别

40次阅读

共计 922 个字符,预计需要花费 3 分钟才能阅读完成。

refout 是 C# 开发中经常用到的两个关键字,但是很多人没有搞清楚这两个关键字的具体区别,下面我们来说一下这两个关键的区别。

零、ref 与 out 的异同

  1. 相同:

    • 都是按地址传递;
    • 使用后都将改变原来参数的值;
    • 编译时处理方式相同;
    • 属性不能作为参数传递。
  2. 不同:

    • ref 将参数值传进方法,out 无法将参数值传入方法;
    • ref 传入参数前必须先初始化,out 不必在参数传输方法前初始化,但必须在方法中初始化;
    • ref 用在需要被调用的方法修改调用者的引用的时候,out 用在需要返回多个结果的地方。

一、代码演示

ref 将参数值传进方法

static void Main(string[] args)
{
    // 初始化
    int number = 50;
    Console.WriteLine("调用方法前 number 值:" + number);
    RefFunction(ref number);
    Console.WriteLine("调用方法后 number 值:" + number);
    Console.Read();}

// 传入的参数值是 50,方法中使用的 num 值也是 50
static void RefFunction(ref int num)
{num = num / 2;}

输出结果如下图所示:

out 无法将参数值传入方法

static void Main(string[] args)
{
    int number = 50;
    Console.WriteLine("调用方法前 number 值:" + number);
    OutFunction(out number);
    Console.WriteLine("调用方法后 number 值:" + number);
    Console.Read();}

// 无法将的参数值 50 传入,但是必须在方法中初始化
static void OutFunction(out int num)
{
    // 初始化
    num = 120;
    num = num / 2;
}

输出结果如下图所示:

小拓展:如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载。如下代码示例就是重载,可以通过编译:

static void Function(out int num)
{
    num = 120;
    num = num / 2;
}
static void Function(int num)
{num = num / 2;}

正文完
 0