C#のアセンブリのロードとレイトバインディング
-
22-08-2019 - |
質問
私はC#と.NETのこのの本を読んでいると私は思いクールなものの束を学びます。私は、動的にアセンブリをロードし、そのアセンブリ内の型のインスタンスを作成する方法について著者会談部分を読みました。
AS3では、それは一つのことを除いて、スタッフの同じ種類を行うことが可能です:あなたは、クラスのセットをコンパイルしないようにコンパイラーに頼むことができますが、型の安全性をチェックします。ここでは例があります:
//Defined in an external library
public class A {...}
//In my application, I tell the compiler to type check A, but not compile it
var a:A = new A();
a.whatever();
私のアプリケーションのコードで実行時に、私は動的に、クラスAの定義を含む私の外部ライブラリをロードすることができ、私のアプリケーションののApplicationDomainにそれらの定義をロードし、すべてが正常に実行されます。反射のないニーズ!
C#で、このことは可能ですか?
言い換えれば、私はクラスの束に対してです。TypeCheckするC#コンパイラに指示することができます(ライブラリで、のは言わせて)が、コンパイルから除外?
解決
私は<のhref = "http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000045.html" のrel = "nofollowをnoreferrer ">
こののを読んでアクションスクリプトは、それが「特別ボーナス」タイプのチェック機能、それは静的型付け言語が行うと同じように、あなたはコンパイル時にバグをキャッチするのに役立ちますよう提供しています、動的な言語です。
C#が、それはコンパイル時に、そのすべての型チェックを行い、静的型付け言語です。型チェックが、それは不可欠な機能です「おまけ」ではありません。 C#がリフレクションを使用して、後期結合する能力を持っていた常にしており、機能は、新しい今後のダイナミックなキーワードと良くなっています。
あなたはC#が持つ遅延バインディング機能のいずれかを使用する場合は、しかし、あなたは何型チェックを取得していません。
他のヒント
私はAS3のコードが何をしているかについては100%明確ではないんだ - しかし、あなたはあなたの外部アセンブリが実装できることを(別のDLLで)共通のインターフェイスを定義したいように聞こえる - あなたが作成するとき、単にそれをキャスト対象ます:
Type type = loadedAssembly.GetType(fullyQualifiedName);
IMyInterface obj = (IMyInterface)Activator.CreateInstance(type):
今、あなたは簡単にobj
上で定義されたメソッドを使用することができます。
あるいは、C#4.0でdynamic
キーワードは、ダックタイピングを提供しています。