.NET Reflection 経由でプライベート メンバーにアクセスする
特定の状況では、リフレクションを利用して .NET オブジェクト内のプライベート フィールドにアクセスすると有益であることがわかります。このガイドでは、プライベート アクセス修飾子にかかわらず、リフレクションを使用してクラスからプライベート フィールド _bar
を取得する方法を説明します。
リフレクションを使用したフィールドの取得
.NET Reflection API は、指定された型の GetFields()
オブジェクトの配列を返す FieldInfo
メソッドを提供します。 デフォルトでは、パブリック フィールドのみが返されます。プライベートフィールドにアクセスするには、適切なバインディングフラグを指定する必要があります。
バインドフラグについて
バインディング フラグは、リフレクション操作にどのメンバーが含まれるかを制御します。プライベートフィールドにアクセスするには、以下が必要です:
BindingFlags.NonPublic
: 非公開メンバー (プライベート、内部、保護) が含まれます。BindingFlags.Instance
: (静的フィールドではなく) インスタンス フィールドが含まれます。コード例: プライベート フィールドへのアクセス
_bar
クラスのプライベート Foo
フィールドにアクセスするには:
<code class="language-csharp">Type myType = typeof(Foo); FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo field in fields) { // Example: Check for a custom attribute if (field.IsDefined(typeof(SomeAttribute), false)) { Console.WriteLine($"Found private field: {field.Name}"); } }</code>
重要な注意事項: 属性チェックはデモンストレーション用です。 リフレクションにより、すべてのフィールド情報 (タイプ、値、修飾子など) を取得できます。 プライベート メンバーに直接アクセスするとカプセル化が解除される可能性があるため、慎重に使用する必要があることに注意してください。
以上が.NET でリフレクションを使用してプライベート フィールドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。