C#에서 클래스 필드 참조
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(Updated By) 예상대로 "X (Updated By Y) (Updated By Z)"가 아닌 Y)"입니다.
이는 클래스 필드에 참조 매개변수를 할당하기 때문입니다. 참조가 중단됩니다. 참조를 유지하려면 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 -- setting x.Value changes y. }
이 예에서 'x'는 'y' 값을 가져오고 설정할 수 있는 개체이며, 사이의 참조를 유지합니다. 그들을. 참조 로컬 및 참조 반환 메서드는 CLR에서 지원되지만 C#에서는 아직 사용할 수 없습니다.
위 내용은 클래스 필드에 참조 매개 변수를 할당해도 C#에서 참조가 유지되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!