Activator.CreateInstanceを使用して、実行時にDLLからオブジェクトを作成しています。
オブジェクトがインターフェイスの場合、エラーが発生し、そのインターフェイスのオブジェクトを作成したくありません。
だから私の質問は、オブジェクトがインターフェイスであり、クラスではないかどうかを確認するオプションはありますか?
各回答に個別に返信したくないので、type.IsInterface の代わりに type.IsAbstract を使用する必要があります。これは、抽象クラスでもアクティベーターを起動したくないためです (また、.IsAbstract はインターフェイスもカバーします)。まだこの問題に遭遇していないかもしれませんが、潜在的な問題であることは間違いありません。
タイプがインターフェースタイプであるかどうかを確認したいということですか?もしそうなら、それは簡単です:
if (type.IsInterface)
「このオブジェクトは任意のインターフェイスを実装するタイプである」という意味の場合でも、それは実現可能ですが、より難しく、おそらくあまり有用ではありません...
あなたはこれを行うことができます:
Type t = obj.GetType();
t.IsInterface()
これは役に立ちますか?
Type t = typeof(T);
if (t.IsInterface) {
} else {
}
ちなみに、あなたはインターフェースであるオブジェクトを作成したくないと述べています。原因のそれを行うことはできません。ただし、クラスをインスタンス化し、インターフェイスを実装する構造体を定義することはできます。
var obj = new MyClass(); // OK
var s = new MyStruct(); // OK
var i = new IMyInterface(); // NOT POSSIBLE!
インターフェイスには実装がありません。これらは、クラスと構造体がインターフェースを実装するふりをするときに満たさなければならないコントラクトです。