通过Activator.CreateInstance检查Object是否为Interface

时间:2012-04-27 13:27:34

标签: c# types interface casting activator

我正在使用Activator.CreateInstance在运行时从Dll创建一个对象,

如果对象是接口,我会收到错误,我不想创建该接口的对象。

所以我的问题是有没有选项来检查对象是否是接口而不是类?

4 个答案:

答案 0 :(得分:5)

由于我不想单独回复每个答案,你应该使用type.IsAbstract而不是type.IsInterface,因为你不想在抽象类上触发激活器(和.IsAbstract覆盖接口)太)。您可能还没有遇到过这个问题,但这肯定是一个潜在的问题。

答案 1 :(得分:4)

您的意思是要检查类型是否是接口类型?如果是这样,那很简单:

if (type.IsInterface)

如果你的意思是“这是一个实现任何接口的类型的对象”,它仍然可行,但更难,可能没那么有用......

答案 2 :(得分:3)

你可以这样做:

Type t = obj.GetType();
t.IsInterface()

答案 3 :(得分:1)

这会有帮助吗?

Type t = typeof(T);
if (t.IsInterface) {
} else {
}

顺便提一下,您声明您不想创建作为接口的对象。 可以做到原因;但是,您可以实例化类并定义实现接口的结构。

var obj = new MyClass();  // OK
var s = new MyStruct();  // OK
var i = new IMyInterface(); // NOT POSSIBLE!

接口没有实现。它们是类和结构在假装实现接口时必须满足的契约。