c#关于ref与out,params传参
1、params
首先,参数必须是一维数组;
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字
使用后params可以直接使用一组对象作为参数如代码中调用方法2
//定义 public void TestParams(params object[] list) { foreach (object o in list) { if (o is Bclass) Console.WriteLine(o + " is Bclass!"); else Console.WriteLine(o + " is not Bclass"); } } //调用 string str1="test"; object[] po = new object[] { 100, "guid", str1 }; TestParams(po);//调用方法1 TestParams(100,"str",str,b1);//调用方法2
2、ref,out
通常我们向方法中传递的是值.方法获得的只是这些值的一个副本,然后使用这些副本
当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响.
而使用ref或out后,可以使参数按照引用来传递;方法体里对传递参数做了改变,调用完方法后,原先参数也做了改变
static void TestRefAndOut() { string s1 = "Hello World!"; TestRef(ref s1); Console.WriteLine(s1);//output: Method TestRef: Hello World! TestOut(out s1); Console.WriteLine(s1);//output: Method TestOut: Hello World! } static void TestOut(out string str) { str = "Method TestOut: Hello World!"; } static void TestRef(ref string str) { str = "Method TestRef: Hello World!"; }
相同之处:
1、方法定义和调用方法时,都必须显式使用ref或out关键字
区别:
1、使用ref,参数必须在调用方法前初始化值;out不用;
2、使用out,必须在方法内部对参数赋值;ref不用;
适合使用情景:
1、out适合用在需要retrun多个返回值的地方;(一个方法只能有一个return值,而使用out传参可以达到多个返回值)
2、ref则用在需要被调用的方法修改调用者的引用的时候