0

アセンブリをロードした後、それをインスタンス化する場合:

Assembly asm = Assembly.LoadFile(@"c:\file.dll");
Type type = asm.GetType("DLLTYPE");
object instance = Activator.CreateInstance(type);

C#はどのようにタイプを知っていますか?
私の論理からすると、dllにはオブジェクトタイプを定義するヘッダーが必要です。
では、なぜDLLTYPE文字列は?

4

1 に答える 1

3

C#はどのようにタイプを知っていますか?

パラメータとして渡しました:

Type type = asm.GetType("DLLTYPE");

では、なぜ「DLLTYPE」文字列が?

インスタンス化するのは、名前空間とクラス名です。

Namespace.ClassName

タイプ名を間違えると、このメソッドはnullを返すので注意してください。タイプが存在することを確認したい場合は、次のオーバーロードを使用できます。

Type type = asm.GetType("Namespace.ClassName", true);

これにより、nullを返す代わりに例外がスローされ、Activator.CreateInstanceメソッドで取得するNREの代わりにデバッグが容易になります。

于 2013-01-17T14:14:07.897 に答える