关于c#:ref和out有什么区别?


What is the difference between ref and out?

本问题已经有最佳答案,请猛点这里访问。

当我尝试用ref关键字替换out关键字时,下面的代码中没有错误。当我尝试用out代替ref时,出现了一个错误,如"unassigned out parameter"这个错误是什么意思?

1
2
3
4
5
6
7
8
9
10
11
12
13
   static void Main()
    {
        string test ="34";
        addOneToRefParam(out test);
        Console.WriteLine("test is :" + test);
    }

    public static void addOneToRefParam(out string i)
    {
        int  k =Convert.ToInt32(i) + 1;
        i = Convert.ToString(k);
        Console.WriteLine("i is :" + i);
    }


在传递给函数之前,必须初始化ref参数,该参数可能会被函数更改,也可能不会被函数更改。因此,在传递之前需要初始化它,就像处理非引用参数一样:

1
2
3
int i;
Foo(i); // error unassigned variable
Foo(ref i) // same error

对于out,您的函数保证将参数设置为一个值,因此不需要初始化。