分配給欄位時保留引用
在 C# 中,不可能透過「引用」分配給類別欄位。這是因為欄位不能是引用類型。造成這種情況的主要原因有三:
限制原因:
解決方法:
儘管有限制,但有一個解決方法可以模擬類似引用的行為:
使用委託與操作:
建立一個具有所需值的getter 和setter的委託。將此委託儲存在欄位中而不是引用中。例如:
sealed class Ref<T> { private readonly Func<T> getter; private readonly Action<T> setter; public Ref(Func<T> getter, Action<T> setter) { this.getter = getter; this.setter = setter; } public T Value { get { return getter(); } set { setter(value); } } } ... Ref<int> x; void M() { int y = 123; x = new Ref<int>(() => y, z => { y = z; }); x.Value = 456; Console.WriteLine(y); // 456 }
在這種情況下,x 儲存一個可以取得和設定 y 值的委託。當你設定 x.Value 時,它會修改 y.
以上是為什麼不能透過引用來分配 C# 類別字段,以及如何解決這個問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!