ホームページ >バックエンド開発 >C++ >C# でリフレクションを使用して、文字列として名前が指定されたクラスの静的メソッドを呼び出すにはどうすればよいですか?

C# でリフレクションを使用して、文字列として名前が指定されたクラスの静的メソッドを呼び出すにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-14 11:18:43709ブラウズ

How Can I Use Reflection in C# to Invoke a Static Method on a Class Given Its Name as a String?

リフレクションを介した静的 C# メソッドへの動的アクセスと呼び出し

文字列として保存されたクラス名 (例: "MyClass") があり、その静的メソッドの 1 つを呼び出す必要があると想像してください。 リフレクションは、この動的な動作を実現するメカニズムを提供します。このガイドでは、リフレクションを使用して文字列名からクラス参照を取得し、その後静的メソッドを呼び出す方法を説明します。

クラスの取得に Type.GetType を使用する

Type.GetType メソッドは、クラスに動的にアクセスするための鍵です。 完全修飾クラス名を文字列として受け取り、そのクラスを表す Type オブジェクトを返します:

<code class="language-csharp">Type classType = Type.GetType("MyClass"); </code>

リフレクションを使用したメソッド呼び出し

Type オブジェクトを取得したら、GetMethod を使用して、呼び出したい静的メソッドを表す MethodInfo オブジェクトを取得できます。

<code class="language-csharp">MethodInfo methodInfo = classType.GetMethod("MyStaticMethod", BindingFlags.Static | BindingFlags.Public);</code>

これは「MyStaticMethod」という名前のメソッドを取得し、それがパブリック静的メソッドであることを確認します。 BindingFlags は検索基準を指定します。

最後に、Invoke を使用してメソッドを呼び出します:

<code class="language-csharp">methodInfo.Invoke(null, null); // null for static method, null for no parameters</code>

パラメータを持つメソッドの場合、オブジェクトの配列を 2 番目の引数として Invoke に渡します。

重要な考慮事項:

  • アセンブリの読み込み: クラスを含むアセンブリがアプリケーション ドメインに読み込まれていることを確認します。
  • エラー処理: 潜在的な例外 (例: try-catchTypeLoadException) を処理するために、リフレクション呼び出しを MethodNotFoundException ブロックでラップします。
  • アクセス修飾子: クラスとそのメソッドのアクセス修飾子 (public、private など) を尊重します。 それに応じて BindingFlags を調整する必要がある場合があります。

これらの手法を採用することで、C# での動的メソッド呼び出しの力を解放し、柔軟で適応性のあるアプリケーションを実現できます。

以上がC# でリフレクションを使用して、文字列として名前が指定されたクラスの静的メソッドを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。