C# では、通常、プライベート メソッドはカプセル化とセキュリティ上の理由から隠されています。 ただし、実行時にこれらのプライベート メソッドを動的に呼び出すことが必要になる状況が発生する場合があります。 ここで反省の力が役に立ちます。
標準の GetMethod()
呼び出しは、パブリック、保護された、内部メソッドのみを取得します。プライベート メソッドにアクセスするには、オーバーロードされたバージョンの GetMethod()
を使用し、正しい BindingFlags
.
重要なのは、BindingFlags
呼び出し内で適切な GetMethod()
を使用することです。 その方法は次のとおりです:
<code class="language-csharp">MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType, BindingFlags.NonPublic | BindingFlags.Instance); dynMethod.Invoke(this, new object[] { methodParams });</code>
このコード スニペットは、プライベート メソッド (「Draw_」 itemType を使用して動的に名前が付けられます) を取得し、dynMethod.Invoke()
を使用してそれを呼び出します。
BindingFlags
列挙は、検索に含めるメンバーを制御します。プライベート メソッド呼び出しの場合、BindingFlags.NonPublic
と BindingFlags.Instance
が重要です。
BindingFlags.NonPublic
: このフラグには非公開メンバー (プライベートおよび保護) が含まれます。BindingFlags.Instance
: このフラグは、静的メソッドを除くインスタンス メソッドの検索を制限します。BindingFlags
列挙とそのさまざまなオプションの詳細については、Microsoft の公式ドキュメントを参照してください [ドキュメントの URL をここに挿入]。
このアプローチにより、開発者は同じクラス インスタンス内からプライベート メソッドを動的に呼び出すことができ、クラス メンバーの高度なランタイム操作の可能性が広がります。
以上がC#でリフレクションを使用してプライベートメソッドを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。