フィールドへの代入時に参照を保持する
C# では、クラス フィールドに「参照」によって代入することはできません。これは、フィールドを参照型にすることができないためです。これには主に 3 つの理由があります:
制限の理由:
回避策:
制限にもかかわらず、シミュレートする回避策があります。参照のような動作:
デリゲートの使用とアクション:
必要な値のゲッターとセッターを含むデリゲートを作成します。このデリゲートを参照ではなくフィールドに保存します。例:
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 中国語 Web サイトの他の関連記事を参照してください。