在 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 關注
- 93 瀏覽
添加回答
舉報
0/150
提交
取消