c#中关于ref和out概念及使用

1 关于重载

原则:有out|ref关键字的方法可以与无out和ref关键字的方法构成重载;但如想在out和ref间重载,编译器将提示:不能定义仅在ref和out的上的方法重载

2 关于调用前初始值

原则:ref作为参数的函数在调用前,实参必须赋初始值。否则编译器将提示:使用了未赋值的局部变量;

out作为参数的函数在调用前,实参可以不赋初始值。

3 关于在函数内,引入的参数初始值问题

原则:在被调用函数内,out引入的参数在返回前至少赋值一次,否则编译器将提示:使用了未赋值的out参数;

在被调用函数内,ref引入的参数在返回前不必为其赋初值。

 

但也不是说,引用类型就一定不会用到ref关键字,当我们试图将引用类型的重新赋值时 

public void Changeref(RefClass rc)

{rc = new RefClass() { IntValue = 1000 };}

如果不加ref ,prc实际上是在函数内部将引用的地址,指向了另一new RefClass(),返回值会发现它的值未发生改变 

public static void A() {

List<string> strList=new List<string>();

strList.Add("111");

B(ref strList)

}

public static void B(ref List<string> strlist)

{

strlist.Add("123");

}

在B方法中strList包含111数据了,再调用完B方法后返回的strList中就已经包含111和123这两个数据了

public static void A() {

List<string> strList=new List<string>();

strList.Add("111");

B(out strList)

}

public static void B(out List<string> strlist)

{

strlist=new List<string>();

strlist.Add("123");

}

在B方法中需要重新给list<string>赋值才行,然后执行完B方法后strList中只有123数据,把方法里面的out直接改成ref其实结果都是一样的。

out方法不需要给初始值,因为在方法里面需要重新赋值,ref必须给初始值,方法里面是在初始值的基础上进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值