c#检查确切类型
我想检查一个对象的类型。 如果类型完全相同,我只想返回true。 inheritance的类应该返回false。
例如:
class A {} class B : A {} B b = new B(); if(b is A) // this should return false
b.GetType() == typeof(A)
(b is A)
检查b是否与A类型兼容,这意味着它检查b的inheritance层次结构和类型A的已实现接口。
b.GetType() == typeof(A)
另一方面检查完全相同的 Type。 如果你没有进一步限定类型(即铸造),那么你正在检查b的声明类型。
在任何一种情况下(使用上述任何一种),如果b是A的确切类型,你将得到true
。
要小心知道为什么要在一种情况下使用精确类型而不是另一种情况:
- 例如,检查确切类型会破坏您可能不希望最终完成的OO多态性的目的。
- 但是,例如,如果您正在实施一个专门的软件设计模式,如Inversion of Control IoC容器,那么您有时希望使用精确类型。
编辑:
在你的例子中,
if(b is A) // this should return false
使用以下方法将其转换为精确声明的类型检查
if (b.GetType() == typeof(A))
使用:
if (b.GetType() == typeof(A)) // this returns false
您的代码示例似乎与您的问题相反。
bool isExactTypeOrInherited = b is A; bool isExactType = b.GetType() == a.GetType();
bool IsSameType(object o, Type t) { return o.GetType() == t; }
然后你可以调用这样的方法:
IsSameType(b, typeof(A));
请在询问新问题之前使用搜索function。
这个问题已经回答了:
检查类型是否为可转换/子类
并执行相反的操作 – 如果类型是子类,则返回false。
编辑:另一个相关的问题: 类型检查:typeof,GetType,还是?