ref——仅仅是一个地址
(1)当一个方法或函数在使用ref
作为参数时,在方法中或函数中对ref
参数所做的更改都将反映在该变量中。
(2)如果要使用ref
参数,则必须将参数作为ref
显示传递到方法中。ref
参数的值可以被传递到ref
参数。
(3)ref
参数传递的变量必须初始化,因为ref
参数在进入方法后还是它自己,它这个地址指向的还是原来的值,也因为这个原因,ref
参数可以在使用它的方法的内部不操作。这与out
不同,out
的参数在传递前不需要显示初始化。
(4)如果两种方法的声明仅在于它们对于ref
的使用方面不同,则将出现重载。但是,无法定义尽在ref
与out
方面不同的重载。
1 public string paramsRef(ref int i) 2 { 3 i++; 4 return i.ToString(); 5 }
以下是调用:
int i = 120; new ParamTest().paramsRef(ref i); Console.WriteLine("i=" + i);//输出121
out ——引用传递
(1)当一个方法或函数在使用out
作为参数时,在方法中或函数中对out
参数所做的更改都将反映在该变量中。
(2)当希望方法或函数返回多个值时,out
参数十分有用,一个方法或函数可以有一个或多个out
参数。
(3)使用out
参数时,可以不必为参数初始化值,因为out
参数进入方法体后会清空自己。
(4)使用out
参数时,必须显示指定out
关键字。
(5)方法签名中,同一类型参数,如果一个含有out
参数,另一个不包含out
参数,则发生重载。
示例:
1 public int Method(int i,out string str) 2 { 3 i+=10; 4 str="我是out参数!"; 5 return i; 6 }
调用:
1 public static void Main(string[] args) 2 { 3 int i=10; 4 string outStr;//不必初始化 5 i=Method(i,out outStr); 6 Console.WriteLine(i.ToString()); 7 Console.WriteLine(outStr);//输出out参数 8 }
作者:悠扬的牧笛
博客地址:http://www.cnblogs.com/xhb-bky-blog/p/3490036.html
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。