在具有相同ref变量的连续调用方法上实现ref功能

时间:2019-01-17 04:56:17

标签: c# ref

我以以下方式使用了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;
         }

1 个答案:

答案 0 :(得分:2)

  

在main方法中将访问权完全转到原始emp   并在那里创建一个新对象

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

  

如果是,有没有办法我可以实现相同的功能   这么多迭代

什么迭代?毕竟,你做了所有的传承

  

它应该在第五种方法本身和更改中创建一个新对象   应该也反映在主要方法的emp中吗?

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

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

想象一下,您已经制作了一个馅饼并将其放入容器中。

  1. 您将容器传递给Bob
  2. 谁将容器传递给吉姆
  3. 最终将其传递给Joe。

然后,乔决定制作自己的派并将其放入容器中,您原来的派就消失在乙醚中了。

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

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


现在,您需要进行一些研究并阅读文档,请您的老师和您的朋友们做您需要做的一切。但是,问这种类型的问题是多余的,到编写程序时,您已经花了15年时间问一些基本问题,而这些问题可以通过阅读来找出

请从这里开始

ref (C# Reference)

  

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