我试图了解如何通过“引用”分配给c#中的类字段。
我有以下示例可供考虑:
public class X { public X() { string example = "X"; new Y( ref example ); new Z( ref example ); System.Diagnostics.Debug.WriteLine( example ); } } public class Y { public Y( ref string example ) { example += " (Updated By Y)"; } } public class Z { private string _Example; public Z( ref string example ) { this._Example = example; this._Example += " (Updated By Z)"; } } var x = new X();
运行上面的代码时,输出为:
X(由Y更新)
并不是:
X(由Y更新)(由Z更新)
正如我所希望的。
似乎为字段分配“参考参数”会丢失参考。
分配给字段时,有什么方法可以保留引用?
谢谢。
编号ref纯粹是一个调用约定。您不能使用它来限定字段。在Z中,_Example被设置为传入的字符串引用的值。然后,您可以使用+ =为它分配一个新的字符串引用。您永远不会分配示例,因此ref无效。
所需的唯一解决方法是拥有一个包含引用(此处为字符串)的共享的可变包装对象(数组或虚拟StringWrapper)。通常,如果需要,可以找到更大的可变对象供类共享。
public class StringWrapper { public string s; public StringWrapper(string s) { this.s = s; } public string ToString() { return s; } } public class X { public X() { StringWrapper example = new StringWrapper("X"); new Z(example) System.Diagnostics.Debug.WriteLine( example ); } } public class Z { private StringWrapper _Example; public Z( StringWrapper example ) { this._Example = example; this._Example.s += " (Updated By Z)"; } }