对具有相同Ref变量的连续调用方法的Ref功能实现



我以以下方式使用了ref。那么,当在第五种方法中创建新对象时,access是否会一直访问主方法中的原始emp并在那里创建新对象?

如果是的话,有没有一种方法可以让我在没有那么多迭代的情况下实现相同的功能,即它应该在第五个方法中创建一个新的对象,并且这种变化也应该反映在主要方法的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;
}

是否访问主方法中的原始emp并在那里创建一个新对象

它不会在那里创建对象,但它会覆盖对该对象的引用,它会在创建对象的地方创建对象:

如果是的话,有没有一种方法可以让我在没有太多迭代的情况下实现相同的功能

什么迭代?毕竟你做了所有的传球。

它应该在第五个方法中创建一个新对象,并且更改也应该反映在主要方法的emp中?

它已经在这么做了,除了不更改原始员工外,它会覆盖它的位置。

Console.WriteLine(emp.id);
// writes 20

想象一下,你做了一个馅饼,然后把它放在一个容器里。

  1. 您将容器传递给Bob
  2. 谁把集装箱递给吉姆
  3. 最终传给了乔

然后乔决定自己做馅饼并把它放在容器里,你原来的馅饼消失在乙醚中。

此时没有原始对象,容器现在包含新的饼图。

通过引用传递对象时,传递的是指向存储在内存中的数据的引用。如果有人选择覆盖该引用,那么就这样了,拥有该引用的每个人都会得到新的覆盖引用。


现在你需要做一些研究和阅读文档,询问你的老师或朋友,做你需要做的事情。然而,问这种类型的问题是多余的,当你写一个程序时,你已经花了15年的时间问一些基本的问题,你可以通过阅读来解决这些问题。

请从这里开始:

ref(C#参考)

在方法的参数列表中使用时,ref关键字表示参数是通过引用传递的,而不是通过值传递的。传递引用是指调用中对参数的任何更改方法反映在调用方法中。例如,如果调用者传递局部变量表达式或数组元素访问表达式,并且被调用的方法替换ref指向的对象参数引用,那么当方法返回时,调用者的局部变量或数组元素现在引用新对象。

最新更新