ホームページ > バックエンド開発 > C++ > リフレクションは C# のプライベート読み取り専用フィールドを変更できますか?

リフレクションは C# のプライベート読み取り専用フィールドを変更できますか?

Patricia Arquette
リリース: 2025-01-17 18:16:09
オリジナル
626 人が閲覧しました

Can Reflection Modify C#'s Private Readonly Fields?

リフレクションを使用して 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート