码迷,mamicode.com
首页 > 其他好文 > 详细

ref和out

时间:2017-08-30 17:36:11      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:diff   erro   nbsp   无法   完全   static   ogr   val   readline   

今天对 ref 和 out 解析一下

相同:

a、两者都是按地址传递的。

b、使用后都将改变原来参数的数值。

c、若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字,若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字

不同:
ref 要求变量必须在传递之前进行初始化

eg:

static void Main(string[] args)
{
       Program pg = new Program();
       string x = "1";
       int y = 20;

       pg.GetValue(out x, out y);
       Console.WriteLine("x={0},y={1}", x, y);

       Console.ReadLine();

}
public void GetValue(out string x, out int y)
{
       x = "521";
       y = 520;
}

 

static void Main(string[] args)
{
        Program pg = new Program();
        string x = "1";
        int y = 20;

        pg.GetValue(ref x, ref y);
        Console.WriteLine("x={0},y={1}", x, y);

        Console.ReadLine();

}
public void GetValue(ref string x, ref int y)
{
         x = "521";
         y = 520;
}

以上都输出 x=521,y=520

注:

a、string x = "1"; int y = 20; 使用 out 时 x 和 y 可以不赋初始值;使用 ref 报错 “使用了未赋值的变量”

b、ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,

而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,

因此将不会编译以下代码:

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}
但是,如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示:
class RefOutOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(out int i) { }
}

 

ref和out

标签:diff   erro   nbsp   无法   完全   static   ogr   val   readline   

原文地址:http://www.cnblogs.com/mff520mff/p/7454203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!