我正在使用Activator.CreateInstance在运行时从Dll创建一个对象,
如果对象是接口,我会收到错误,我不想创建该接口的对象。
所以我的问题是有没有选项来检查对象是否是接口而不是类?
答案 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!
接口没有实现。它们是类和结构在假装实现接口时必须满足的契约。