ref 和 out 值类型变量

meo*_*nge 2 c# methods ref out

out 上的 msdn 文档说作为 out 传递的参数必须在函数内部分配一个值。来自网站的示例:

class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }
    static void Main()
    {
        int value;
        Method(out value);
       // value is now 44
    }
 }
Run Code Online (Sandbox Code Playgroud)

根据我的理解,当声明 int "value" 时,它已经被分配了一个默认值 0(因为 int 是一个值类型并且不能为 null。)那么为什么有必要让 "Method" 修改它的值呢?

同样,如果使用“ref”而不是“out”,是否还需要初始化“value”?

有这样的问题'ref' 和 'out' 关键字什么区别?但没有人想把 2 和 2 放在一起。

Guf*_*ffa 5

根据我的理解,当声明 int "value" 时,它已经被分配了一个默认值 0(因为 int 是一个值类型,不能为空。)

不,那是不正确的。

局部变量在创建时没有赋值。局部变量的空间是通过移动堆栈指针为它们在堆栈上腾出空间来创建的。该内存区域不会被清除,它将包含碰巧在那里的任何值。

编译器强制您在使用变量之前为其赋值,这样它最初包含的“垃圾”值将永远不会被使用。

同样,如果使用“ref”而不是“out”,是否还需要初始化“value”?

该值不需要在方法中设置,因为它已经有一个值。用于调用该方法的变量需要初始化:

static void Method(ref int i) {
    // doesn't need to set the value
}

static void Main() {
    int value;
    value = 42; // needs to be initialised before the call
    Method(ref value);
   // value is still 42
}
Run Code Online (Sandbox Code Playgroud)