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则用在需要被调用的方法修改调用者的引用的时候

 

 

 

posted @ 2013-07-23 15:04  loklook123  阅读(244)  评论(0编辑  收藏  举报