我以以下方式使用了ref。所以当在第5种方法中创建新对象时,访问是否会一直到main方法中的原始emp并在那里创建新对象?如果是的话,是否有一种方法可以实现我的相同功能而无需进行太多迭代,即它应该在第5种方法本身中创建一个新对象,并且更改也应反映在主要方法的emp中?
public static void Main(string[] args)
{
Employee emp=new Employee();
emp.id=10;
Program p=new Program();
p.Method1(ref emp);
Console.WriteLine(emp.id);
Console.ReadKey();
}
public void Method1(ref Employee emp)
{
Method2(ref emp);
}
public void Method2(ref Employee emp)
{
Method3(ref emp);
}
public void Method3(ref Employee emp)
{
Method4(ref emp);
}
public void Method4(ref Employee emp)
{
Method5(ref emp);
}
public void Method5(ref Employee emp)
{
emp=new Employee();
emp.id=20;
}
答案 0 :(得分:2)
在main方法中将访问权完全转到原始emp 并在那里创建一个新对象
它不会在那里创建对象,但是会覆盖对该对象的引用,而是在创建对象的地方创建对象
如果是,有没有办法我可以实现相同的功能 这么多迭代
什么迭代?毕竟,你做了所有的传承
它应该在第五种方法本身和更改中创建一个新对象 应该也反映在主要方法的emp中吗?
它已经这样做了,除了不更改原始员工外,它会覆盖其位置。
Console.WriteLine(emp.id);
// writes 20
想象一下,您已经制作了一个馅饼并将其放入容器中。
然后,乔决定制作自己的派并将其放入容器中,您原来的派就消失在乙醚中了。
那时没有原始对象,容器现在包含新的饼图
当您通过引用传递对象时,您传递的是指向存储在内存中的数据的引用,如果有人选择覆盖该引用,那么它就是引用,那么拥有该引用的每个人都会获得新的覆盖对象。
现在,您需要进行一些研究并阅读文档,请您的老师和您的朋友们做您需要做的一切。但是,问这种类型的问题是多余的,到编写程序时,您已经花了15年时间问一些基本问题,而这些问题可以通过阅读来找出
请从这里开始
在方法的参数列表中使用时,ref关键字指示 参数是通过引用而不是值传递的。的效果 通过引用传递的是对被调用参数的任何更改 方法反映在调用方法中。例如,如果来电者 传递局部变量表达式或数组元素访问 表达式,然后调用的方法替换ref所针对的对象 参数引用,则方法返回时,调用者的局部变量或数组元素现在引用新对象。