この記事では主に、リフレクションを使用してクラス名に基づいてクラスオブジェクトのインスタンスを作成する詳細な説明を紹介します。「リフレクション」は実際にアセンブリのメタデータ情報を使用します。興味のある方は参照してください。
「Reflection」は実際にアセンブリのメタデータ情報を使用します。 Reflection には多くのメソッドがあります。プログラムを作成するときは、まず System.Reflectionnamespace をインポートしてください。
1. DLL にクラスを反映したいが、そのクラスへの 参照がない (つまり、不明な型) とします。現在のプロジェクトのクラス (つまり、現在のプロジェクトがすでに参照しています)
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) dynamic obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例
System.Reflection.Assembly.Load("アセンブリ名 (ファイルサフィックス名を除く)").CreateInstance("Namespace.Class name", false);
コードは次のとおりです:
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集 dynamic obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换
注: 動的を使用する必要があるため、コンパイル時にターゲットを 4.0 に変更する必要があります。動的
式
クラスライブラリ
を参照してください。追加後、コンパイルが実行されます。成功するでしょう。
============================================== === ========
補足:
1) リフレクションによってクラスのインスタンスを作成するときは、クラスの完全修飾名 (名前空間 + クラス名) が使用されていることを確認する必要があります。 。 Type.GetType メソッドが null を返した場合は、メタデータ内の search 関連情報が失敗した (反映に失敗した) ことを意味します。反映中にクラスの完全修飾名を使用するようにしてください。 2) リフレクション機能は非常に強力で、達成できないものはありません。 「クロスアセンブリ」を実装したい場合は、最初のメソッドを使用してクラスのインスタンスを作成し、インスタンスのフィールド、
プロパティ
イベント
...を反映して動的に呼び出してください。
以上がC# はリフレクションを使用して、クラス名に基づいてクラスのインスタンス オブジェクトを作成します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。