ホームページ > バックエンド開発 > C++ > .NET でアセンブリ名から型を動的にロードしてインスタンス化するにはどうすればよいですか?

.NET でアセンブリ名から型を動的にロードしてインスタンス化するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-19 09:16:09
オリジナル
743 人が閲覧しました

How Can I Dynamically Load and Instantiate Types from Assembly Names in .NET?

実行時にアセンブリ型を動的に読み込み、インスタンス化します

場合によっては、プロジェクトのアセンブリ参照を変更できずに、実行時にオブジェクトをインスタンス化する必要がある場合があります。これは、必要なクラスのアセンブリ名と完全修飾型名しかわかっていない場合に発生します。

メソッド:

この課題を克服するには、.NET のリフレクションおよびアセンブリ読み込みメカニズムを使用して、次の手順を実行できます。

  1. Assembly.LoadFrom メソッドを使用して、アセンブリをメモリに読み込みます。このメソッドは、アセンブリへの絶対パスが不明な場合でもアセンブリを読み込むことができるため、別のディレクトリに配置されているアセンブリ、またはグローバル アセンブリ キャッシュ (GAC) に読み込まれているアセンブリに適しています。
  2. Type.GetType メソッドを使用して、読み込まれたアセンブリから型メタデータを取得します。この手順では、パラメータとして完全修飾型名が必要です。
  3. 取得した Type オブジェクトを使用して Activator.CreateInstance を呼び出し、必要な型をインスタンス化します。

簡略化されたコード例を次に示します:

<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyCoolAssembly.dll");
Type myType = assembly.GetType("MyNamespace.MyType");
object myInstance = Activator.CreateInstance(myType);</code>
ログイン後にコピー

動的型解決の代替:

アセンブリ ファイル名と型名の両方がある場合は、Activator.CreateInstance(assemblyName, typeName) メソッドを使用できます。このメソッドを使用すると、.NET は手動で反映することなく自動的に型を解決できます。解析の問題が発生した場合は、try/catch ブロックを含めて特定のアセンブリ ディレクトリを検索するか、前述の Assembly.LoadFrom メソッドを使用して手動でロードしてみてください。

これらの手法を使用すると、アセンブリの物理的な場所にアクセスできない場合や、プロジェクト内でアセンブリを直接参照しない場合でも、実行時に型を動的に読み込んでインスタンス化できる柔軟性が得られます。

以上が.NET でアセンブリ名から型を動的にロードしてインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート