1

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

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

所以我的问题是有什么选项可以检查一个对象是否是接口而不是类?

4

4 回答 4

5

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

于 2012-04-27T13:47:04.100 回答
4

你的意思是你想检查一个类型是否是接口类型?如果是这样,这很容易:

if (type.IsInterface)

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

于 2012-04-27T13:30:18.433 回答
3

你可以这样做:

Type t = obj.GetType();
t.IsInterface()
于 2012-04-27T13:30:38.700 回答
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!

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

于 2012-04-27T13:31:06.177 回答