在 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(); }}
2 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
你需要ref
关键字:
public static void Exchange(ref Person p1, ref Person p2)
如此称呼:
Person.Exchange(ref person1, ref person2);
原因是没有ref
,p1
而且p2
都是副本的引用。这并不是说它们是对象的副本,而是对该对象的引用的副本。
有关更多信息,请参阅ref 关键字的文档。
元芳怎么了
TA贡献1798条经验 获得超7个赞
这是因为在 C# 中,值和引用类型都是按值传递的,即传递副本。我们需要明确告诉我们需要通过引用传递它们的位置。
对于引用类型,传递引用的副本。因此,在您的方法内部交换它们不会影响调用方法外部的原始对象引用,因为调用方法外部的变量与方法内部的变量具有不同的引用副本,尽管它们都指向同一个对象并从它们中的任何一个都会影响对象。
- 2 回答
- 0 关注
- 71 浏览
添加回答
举报
0/150
提交
取消