Csharp/C#教程:基于params,ref,out的参数问题详解分享

最近在写程序时遇到params,ref,out参数问题。回头有自习看了看MSDN,才巩固了基础。现在和大家分享一下。
params
params关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次并且不能在其后再有参数定义(之前可以)。
示例:
代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceConsoleApplication1
{
classApp
{
//第一个参数必须是整型,但后面的参数个数是可变的。
//而且由于定的是object数组,所有的数据类型都可以做为参数传入
publicstaticvoidUseParams(intid,paramsobject[]list)
{
Console.WriteLine(id);
for(inti=0;i<list.Length;i++)
{
Console.WriteLine(list[i]);
}
}
staticvoidMain()
{
//可变参数部分传入了三个参数,都是字符串类型
UseParams(1,”a”,”b”,”c”);
//可变参数部分传入了四个参数,分别为字符串、整数、浮点数和双精度浮点数数组
UseParams(2,”d”,100,33.33,newdouble[]{1.1,2.2});
Console.ReadLine();
}
}
}

ref
ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
1.若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字。
2.传递到ref参数的参数必须最先初始化。这与out不同,out的参数在传递之前不需要显式初始化。
3.属性不是变量,因此不能作为ref参数传递。
4.尽管ref和out在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用ref参数,而另一个方法采用out参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
5.如果一个方法采用ref或out参数,而另一个方法不采用这两类参数,则可以进行重载。
示例:
按引用传递值类型是有用的,但是ref对于传递引用类型也是很有用的。这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。
代码如下:
usingSystem;
classApp
{
   publicstaticvoidUseRef(refinti)
   {
       i+=100;
       Console.WriteLine(“i={0}”,i);
   }
   staticvoidMain()
   {
       inti=10;
       //查看调用方法之前的值
       Console.WriteLine(“Beforethemethodcalling:i={0}”,i);
       UseRef(refi);
       //查看调用方法之后的值
       Console.WriteLine(“Afterthemethodcalling:i={0}”,i);
       Console.Read();
    }
}

out
out关键字会导致参数通过引用来传递。这与ref关键字类似。
与ref的不同之处:
1.ref要求变量必须在传递之前进行初始化。
2.尽管作为out参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
示例:
与ref示例不同的地方只要将ref改为out,然后变量i仅需要声明即可。
代码如下:
staticvoidMain()
{
   //inti=10;改为
   inti;
}

您可能感兴趣的文章:c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析解析C#中的ref和out参数C#方法中参数ref和out详解.NET/C#利用反射调用含ref或out参数的方法示例代码C#中out参数、ref参数与值参数的用法及区别

标签: param ram ef ut 参数 ar ams ref

C++判断pe文件实例

C++递归删除一个目录实例

上述就是C#学习教程:基于params,ref,out的参数问题详解分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/904830.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐