c# ref 的使用。

1.ref 的使用。
void Function(ref p)
使用ref 传参,是传递的地址。
public class RefTest : MonoBehaviour {
string p;
void Start () {
p = "J";
Change(ref p); //这里输出“g” 如果去掉ref 输出“J”。
print(p);
}
void Change(string _p)
{
_p = "g";
}
 
void Change(ref string _p)
{
_p = "g";
}
}
ref 传递的地址是引用的地址,即形参和引用会共用地址。对形参的操作即是对引用的操作。
如果不用ref ,相当于重新声明了一个变量,指向了引用的值 的地址。
在代码里=均为指向,故对”=形参 “的操作会将引用的值一直传递下去。如果执行“=形参”以外的操作,比如“形参=” 改变了形参的指向,就会丢失方法开始传入形参的值的地址。这个操作对原引用不会有影响。但是方法里面会丢失传入的值。
2. 以上说法对于值类型比较好理解,但是对于引用类型容易引起混淆。 不过引用类型依旧按照这种规则。
容易混淆的地方是引用类型的复杂程度。比如自定义的类。
当我们创建一个类 比如
class People
{
public string Name;
public People(string s)
{
Name = s;
}
}
如果 执行
People p = new People("ss");
Change(p);
print(p.Name);
在Change 里面如果我们执行
void Change(People _p)
{
_p.Name = "gg";
}
最后 print(p.Name);我们发现结果是“gg”; 就会有个疑问,按照上面的说法我们传入的是P的值,对
_p的操作应该影响不了P的,但输出的结果却改变了。
那么之所以会这样是因为错觉。。。对,迷惑人的一直都是自己的错觉。。
数值会改变是因为我们改变了传过来的值。。。就是这句
_p.Name = "gg";
 
我们其实改变的不是 _p,而是 _p.Name。 _p指向的值跟P指向的值是同一个值。 _p.Name我们已经从 _p的位置到了值的位置。
 
所以在写代码的时候一定要分清楚我们的方法到底是需要对什么进行操作修改。来确定是否使用ref.
 
 
 
 
 
 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值