这个问题已经在这里有了答案: 函数
.NET中的ref
和out
参数之间有什么区别? 在什么状况下一个能够比另外一个更有用? 一个可使用而另外一个不能使用的代码片断是什么? spa
out
和ref
参数用于返回做为方法的参数传递的同一变量中的值。 当您的方法须要返回多个值时,这两个参数很是有用。 code
您必须在calee方法主体中为out参数分配值,不然该方法将没法编译。 对象
参考参数:必须先进行初始化,而后再传递给方法。 方法参数上的
ref
关键字使方法引用做为同一方法的输入参数传递的同一变量。 若是对变量进行任何更改,它们将反映在变量中。 getint sampleData = 0; sampleMethod(ref sampleData);
参考参数的Ex it
public static void Main() { int i = 3; // Variable need to be initialized sampleMethod(ref i ); } public static void sampleMethod(ref int sampleData) { sampleData++; }
输出参数:在传递给方法以前没必要初始化。
out
参数可用于返回做为方法的参数传递的同一变量中的值。 对参数所作的任何更改都将反映在变量中。 ioint sampleData; sampleMethod(out sampleData);
Ex的Out参数 编译
public static void Main() { int i, j; // Variable need not be initialized sampleMethod(out i, out j); } public static int sampleMethod(out int sampleData1, out int sampleData2) { sampleData1 = 10; sampleData2 = 20; return 0; }
ref可能会阻塞null,由于它可能但愿修改现有对象。 out指望为null,由于它正在返回一个新对象。 class
不须要在函数中设置Ref参数,而out参数必须在退出函数以前绑定到一个值。 传递出去的变量也能够不初始化而传递给函数。 变量
out
参数由调用的方法初始化, ref
参数在调用方法以前初始化。 所以,仅在须要获取辅助返回值时使用out
参数,而ref
参数用于获取值并有可能返回对该值的更改(其次是返回主返回值)。
它们几乎是相同的-惟一的区别是,您不须要初始化做为out
参数传递的变量,但必须将其做为ref
参数传递给它。
int x; Foo(out x); // OK int y; Foo(ref y); // Error: y should be initialized before calling the method
Ref
参数用于可能被修改的数据, out
参数用于该函数的附加输出(例如int.TryParse
)的数据,这些数据已经使用了返回值。