您的位置:首页 > 其它

params,out和ref的关键字区别

2011-03-10 21:49 295 查看
(一)params---------可以让参数随意变化的关键字

staticvoid Main(string[] args)
{
TestParams(1, 2, 3);
TestParams(1, 2, 3, 4, 5, 6);//注意参数随意变换

TestParams2(1, "a", "b", 12, 52, 16);

Console.ReadLine();
}

staticvoid TestParams(paramsint[] list)
{
string str =string.Empty;
for (int i =0; i < list.Length; i++)
{
str = str + list[i] +";";
}
Console.WriteLine(str);
}

staticvoid TestParams2(paramsobject[] list)
{
string str =string.Empty;
for (int i =0; i < list.Length; i++)
{
str = str + list[i] +";";
}
Console.WriteLine(str);
}

(二)out------一个引用传递

   因为传递的不是值,而是引用,所以对out参数做的任何修改都会反映在该变量当中

static void Main(string[] args)
{
string str;    //str不必初始化,因为str进入方法后,会清掉自己,使自己变成一个干净的参数,

              //也因为这个原因,在从方法返回前,必须给str赋值,否则会报错。

TestOutPar(out str);

Console.WriteLine(str);
Console.ReadLine();
}

static void TestOutPar(out string str)
{
str = "hello!";
}


   结果显示:"hello!"

如果在TestOutPar方法里注释掉 //str = "hello!";那么程序会报错

  


  用途:
  当希望一个方法能够返回多个值时,这个out就变得非常有用。比如在分页方法中,我们需要返回当前页,页数等等数据。

staticvoid Main(string[] args)
{
int pageCount;
int pageSize;
string result=TestOutPar(out pageCount, out pageSize);

Console.WriteLine(pageCount);
Console.WriteLine(pageSize);
Console.WriteLine(result);
Console.ReadLine();
}

staticstring TestOutPar(outint pageCount, outint pageSize)
{
pageCount =100;
pageSize =12;
return"hello!";
}

  结果显示:100,12,hello!

(三)ref-----------仅仅是一个地址

staticvoid Main(string[] args)
{
int value =10;//必须初始化,因为value进入方法后还是他自己,也因为这个原因,value可以在方法内不操作
TestRefPar(ref value);
Console.WriteLine(value);
Console.ReadLine();
}

staticstring TestRefPar(refint value)
{
//value = 100;  //value在方法内不操作
return"hello!";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: