分配给字段时保留引用
在 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中文网其他相关文章!