C#中ref同out的区别

ref 简单点就是可进可出,out只出不进,它们的区别可以归纳为两点:
1.ref需要初始化 out不需要 例如:
public void Add(ref int i)
{
    int a = 1;
    int b = 2;
    i = a + b + i;
}

public void Execute()
{
    int x = 10;
    Add(ref x);
}

其中的 x在作为参数传入的时候 通过int x=10完成了初始化,

public void Add(out int i)
{
    int a = 1;
    int b = 2;
    i = a + b ;
}

public void Execute()
{
    int x;
    Add(out x);
}

其中x在作为参数传入的时候 没有初始化,

2.通过ref 传入的参数由于肯定完成了初始化,所以可以参与运算,例如 i = a + b + i;

通过out传入的参数,由于不要求完成初始化,所以不能参与运算,其值在函数内部并不知道,所以也不能参与运算,只能给其赋值,在函数外部才能知道其数值,例如 i = a + b ;

注意点:
public void Add(ref int i) 同 public void Add(out int i)在编译的时候是完全一致的,所以这两个方法不能同时存在于一个类中,对于多个参数的传入时, public void Add(ref int i,ref int j)
public void Add(int i,ref int j)可以同时存在,也合法, public void Add(out int i,out int j)也合法,不过由于out不初始化,也就不能传值进来,当函数内部没有局域变量给予赋值时,此函数就没有任何意义了
所有要求 public void Add(int k,out int i,out int j)其中必须要有一个非out参数,不然这个函数即使合法,也没有意义.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值