您的位置:首页 > 编程语言 > C#

c#中ref和out的区别

2013-07-03 15:59 323 查看
通过值传送变量是默认的,也可以迫使值参数通过引用传送给方法。为此,要使用ref

关键字。如果把一个参数传递给方法,且这个方法的输入参数前带有ref 关键字,则该方

法对变量所作的任何改变都会影响原来对象的值:

static void SomeFunction(int[] ints, ref int i)

{

ints[0] = 100;

i = 100; //the change to i will persist after SomeFunction() exits

}

在调用该方法时,还需要添加ref 关键字:

SomeFunction(ints, ref i);

在C#中添加ref 关键字等同于在C++中使用&语法指定按引用传递参数。但是,C#在

调用方法时要求使用ref 关键字,使操作更明确(因此有助于防止错误)。

最后,C#仍要求对传递给方法的参数进行初始化,理解这一点也是非常重要的。在传

递给方法之前,无论是按值传递,还是按引用传递,变量都必须初始化。

(5) out 关键字

在 C 风格的语言中,函数常常能从一个例程中输出多个值,这是使用输出参数实现的,

只要把输出值赋给通过引用传递给方法的变量即可。通常,变量通过引用传送的初值是不

重要的,这些值会被函数重写,函数甚至从来没有使用过它们。

如果可以在C#中使用这种约定,就会非常方便。但C#要求变量在被引用前必须用一

个初值进行初始化。尽管在把输入变量传递给函数前,可以用没有意义的值初始化它们,

因为函数将使用真实、有意义的值初始化它们,但是这样做是没有必要的,有时甚至会引

起混乱。但有一种方法能够简化C#编译器所坚持的输入参数的初始化。

编译器使用out 关键字来初始化。当在方法的输入参数前面加上out 关键字时,传递

给该方法的变量可以不初始化。该变量通过引用传送,所以在从被调用的方法中返回时,

方法对该变量进行的任何改变都会保留下来。在调用该方法时,还需要使用out 关键字,

与在定义该方法时一样:

static void SomeFunction(out int i)

{

i = 100;

}

public static int Main()

{

int i; // note how i is declared but not initialized

SomeFunction(out i);

Console.WriteLine(i);

第3 章对象和类型

83

return 0;

}

out 关键字是C#中的新增内容,在Visual Basic 和C++中没有对应的关键字,该关键

字的引入使C#更安全,更不容易出错。如果在函数体中没有给out 参数分配一个值,该方

法就不能编译。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#