リフレクション
あなたが示したコードは、リフレクションを使用して動的にクラスをインスタンス化し、そのメソッドを実行する手法を示しています。リフレクションは、C#や他のプログラミング言語で、オブジェクトの型、メソッド、プロパティ、フィールドなどの情報を動的に取得したり、操作したりするための機能です。
リフレクション (Reflection)
-
概要: リフレクションは、実行時に型情報を調べたり、インスタンスを作成したり、メソッドを呼び出したりする能力を提供します。これは、柔軟なプログラムを作成するために非常に有用です。
-
特徴:
- 型情報の取得
- メソッドの動的呼び出し
- プロパティやフィールドへのアクセス
- アセンブリ情報の取得
-
使用シーン:
- プラグインシステムやスクリプトエンジン
- ツールやエディタ拡張
- DI (Dependency Injection) コンテナ
コード解説
あなたのコードは、以下のような処理を行っています。
- クラス名の生成:
Class1,Class2などのクラス名を生成します。 - 型の取得:
Type.GetTypeを使ってクラスの型を取得します。 - インスタンスの作成:
Activator.CreateInstanceを使って、取得した型のインスタンスを作成します。 - インターフェースのキャスト: 作成したインスタンスを指定されたインターフェースにキャストします。
- メソッドの呼び出し:
instance.MyFunction()を使ってインターフェースからメソッドを呼び出します。MethodInfo.Invokeを使って、動的に取得したメソッドを呼び出します。
例
この手法は、特にプラグインシステムやコンフィギュラブルなアプリケーションで役立ちます。例えば、ユーザーが定義したクラスやスクリプトを読み込んで、それを実行するシステムなどで使われます。
他の関連用語
- ダイナミックディスパッチ: 動的にメソッドを決定すること。リフレクションを使って、実行時に適切なメソッドを呼び出します。
- 動的型付け: リフレクションを通じて、実行時に型情報をもとに操作を行います。
- ファクトリーパターン: リフレクションを使ってインスタンスを生成する方法。クラスを知っている必要がなく、抽象化されたインスタンス生成が可能です。
このように、リフレクションは強力ですが、パフォーマンスに影響を与えることがあるため、使用は必要な場合に限るのが良いでしょう。