ホームページ  >  記事  >  バックエンド開発  >  C# はリフレクションを使用して、クラス名に基づいてクラスのインスタンス オブジェクトを作成します。

C# はリフレクションを使用して、クラス名に基づいてクラスのインスタンス オブジェクトを作成します。

黄舟
黄舟オリジナル
2017-03-16 10:57:502782ブラウズ

この記事では主に、リフレクションを使用してクラス名に基づいてクラスオブジェクトのインスタンスを作成する詳細な説明を紹介します。「リフレクション」は実際にアセンブリのメタデータ情報を使用します。興味のある方は参照してください。

「Reflection」は実際にアセンブリのメタデータ情報を使用します。 Reflection には多くのメソッドがあります。プログラムを作成するときは、まず System.Reflection

namespace をインポートしてください。

1. DLL にクラスを反映したいが、そのクラスへの 参照がない (つまり、不明な型) とします。現在のプロジェクトのクラス (つまり、現在のプロジェクトがすでに参照しています)

Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) 
dynamic obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例

3 の場合もあります。異なるアセンブリをロードして呼び出す必要がある場合、コードは次のとおりです。

System.Reflection.Assembly.Load("アセンブリ名 (ファイルサフィックス名を除く)").CreateInstance("Namespace.Class name", false);


例:

コードは次のとおりです:

Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集 
dynamic obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); 
// 创建类的实例,返回为 object 类型,需要强制类型转换

注: 動的を使用する必要があるため、コンパイル時にターゲットを 4.0 に変更する必要があります。動的

をコンパイルするために必要な型が見つかりません。不足している参照はありますか?」エラーは、参照がないことが原因です。プロジェクト内のMiscorsoft.CSharp

クラスライブラリ
を参照してください。追加後、コンパイルが実行されます。成功するでしょう。


============================================== === ========


補足:

1) リフレクションによってクラスのインスタンスを作成するときは、クラスの完全修飾名 (名前空間 + クラス名) が使用されていることを確認する必要があります。 。 Type.GetType メソッドが null を返した場合は、メタデータ内の search 関連情報が失敗した (反映に失敗した) ことを意味します。反映中にクラスの完全修飾名を使用するようにしてください。 2) リフレクション機能は非常に強力で、達成できないものはありません。 「クロスアセンブリ」を実装したい場合は、最初のメソッドを使用してクラスのインスタンスを作成し、インスタンスのフィールド、
プロパティ

、メソッド、

イベント
...を反映して動的に呼び出してください。


りー

以上がC# はリフレクションを使用して、クラス名に基づいてクラスのインスタンス オブジェクトを作成します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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