C#:ref和out的区别(转)

C# Ref 与out 的区别
在C#中,有四种传递参数方式:

  1. 传值 (value) : 无额外修饰符

  2. 传址(reference) : 需修饰符Ref,传入函数的参数必须先赋值

  3. 输出参数(output): 需修饰符out,适用于return多个返回值,必须在方法中赋值
    4.数组参数 (array):需修饰符params 引用网上一段话:ref 是有进有出(进时需赋值,内部可以修改,并且修改后的值函数结束后仍将保留) 而out是只出不进 (外部即便赋值,也不会传入函数内,编译器将提示该参数未被初始化,在函数内必须赋值,修改后和Ref参数一样,其值将保留)
    class Program
    {
    static void Main(string[] args)
    {
    int m = 0;// ref 参数使用前必须初始化赋值
    int k=100; // out 参数使用前不用初始化赋值,即便初始化,当使用out引用后,编译器仍将认为其未初始化
    MessageBox.Show(k.ToString()); //返回100
    MessageBox.Show(RefValue(1, ref m).ToString());//返回1
    MessageBox.Show(m.ToString());//返回222
    MessageBox.Show(OutValue(1, out k).ToString());//返回223
    MessageBox.Show(k.ToString());//返回222
    }

    private static int RefValue(int i, ref int j)
    {
    int k = j;
    j = 222;
    return i + k;
    }

    private static int OutValue(int i, out int j)
    {
    //int k = j; //即便在外部定义了j=100 ,但任然无法使用,编译器提示未初始化
    j = 222;
    return i + j;
    }
    }
    传值参数在方法中如果改变了参数的值,其改变后的值只能在方法内使用,方法调用完成后参数只会保留原来传入时的值。
    通过以上测试,可以看到out 和ref 应用骏相当于传递指针,故其修改将直接修改原参数的值。
    网上看到:http://greatverve.cnblogs.com/archive/2012/02/27/ref-out.html
    属性不是变量,不能作为ref 和out参数传递,这里记录下来

作者:yidifanhua

出处:http://www.cnblogs.com/yidifanhua/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值