交换参考资料的最佳方式是什么?

在 C# 中交换引用的最佳方式是什么?


为什么我的静态方法Exchange不起作用?但是 Main 中的代码有效。


class  Person

{    

    public Person(int money)

    {

        Money = money;

    }

    public  int Money { get; set; }

    public static void Exchange(Person p1, Person p2)

    {

        Person newPerson = p1;

        p1 = p2;

        p2 = newPerson;

    }

   public object Clone()

    {

        return new Person( Money);

    }

}

 class Program

{     

    static void Main(string[] args)

    {

        Person p1 = new Person(100);

        Person p2=new Person(200);

        Person newPerson = p1;

        p1 = p2;

        p2 = newPerson;

        Console.WriteLine(p1.Money);

        Console.WriteLine(p2.Money);

        Console.ReadKey();

    }

}


慕莱坞森
浏览 73回答 2
2回答

沧海一幻觉

你需要ref关键字:public static void Exchange(ref Person p1, ref Person p2)如此称呼:Person.Exchange(ref person1, ref person2);原因是没有ref,p1而且p2都是副本的引用。这并不是说它们是对象的副本,而是对该对象的引用的副本。有关更多信息,请参阅ref 关键字的文档。

元芳怎么了

这是因为在 C# 中,值和引用类型都是按值传递的,即传递副本。我们需要明确告诉我们需要通过引用传递它们的位置。对于引用类型,传递引用的副本。因此,在您的方法内部交换它们不会影响调用方法外部的原始对象引用,因为调用方法外部的变量与方法内部的变量具有不同的引用副本,尽管它们都指向同一个对象并从它们中的任何一个都会影响对象。
打开App,查看更多内容
随时随地看视频慕课网APP