c# 检查完全类型
c# 检查完全类型
这个问题已经有了答案:
我想检查一个对象的类型。我只想在类型完全相同的情况下返回true。继承类应该返回false。
比如:
class A {} class B : A {} B b = new B(); // The next line will return true, // but I am looking for an expression that returns false here if(b is A)
admin 更改状态以发布 2023年5月23日
(b is A)
检查b与类型A的兼容性,这意味着它同时检查b的继承层次结构和实现的接口,以确定是否为类型A。
另一方面,b.GetType() == typeof(A)
检查的是完全相同的类型。如果没有进一步指定类型(如强制类型转换),那么就是检查b的声明类型。
使用上述方法之一,在任何情况下,如果b是A的确切类型,则会获得true
。
要小心了解您为什么想在一种情况下使用完全类型而不是另一种情况:
- 例如,检查确切类型会破坏OO多态性的目的,这可能不是您最终想要的。
- 但是,例如,如果您正在实现专门的软件设计模式,比如控制反转IoC容器,那么有时您将需要使用确切的类型。
编辑:
在您的示例中,
if(b is A) // this should return false
使用以下内容将其转换为一个确切声明类型的检查:
if (b.GetType() == typeof(A))