リフレクションを使用して C# のプライベート読み取り専用フィールドを変更する
C# のリフレクションは、プライベートな読み取り専用フィールドを操作する機能など、強力な機能を提供します。 オブジェクトの作成後にプライベート読み取り専用フィールドを変更できるかどうかを調べてみましょう。
次の例を考えてみましょう:
<code class="language-csharp">public class Foo { private readonly int bar; public Foo(int num) { bar = num; } public int GetBar() { return bar; } } Foo foo = new Foo(123); Console.WriteLine(foo.GetBar()); // Outputs 123</code>
リフレクションによるフィールドの変更
次に、リフレクションを使用して bar
フィールドを変更しましょう:
<code class="language-csharp">typeof(Foo).GetField("bar", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(foo, 567);</code>
このコード スニペットは、リフレクションを使用してプライベート bar
フィールドにアクセスし、その値を 567 に設定します。
結果
この反映操作の後、bar
の値は実際に変更されました:
<code class="language-csharp">Console.WriteLine(foo.GetBar()); // Outputs 567</code>
これは、private readonly
と宣言されているにもかかわらず、オブジェクトの作成後にリフレクションによってフィールドの値を変更できることを示しています。 これは可能ですが、一般的に悪い習慣であると考えられており、予期せぬ結果や保守性の問題が発生する可能性があるため、絶対に必要な場合を除き、避ける必要があります。
以上がリフレクションは C# のプライベート読み取り専用フィールドを変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。