c#检查确切类型

Tar*_*her 24 c# types

我想检查一个对象的类型.如果类型完全相同,我只想返回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) 
Run Code Online (Sandbox Code Playgroud)

Cha*_*ion 44

b.GetType() == typeof(A)
Run Code Online (Sandbox Code Playgroud)

  • 在原始示例中,他想要:`b.GetType()== typeof(A)`因为'a'未被声明. (2认同)

Joh*_*n K 11

(b is A) 检查b是否与A类型兼容,这意味着它检查b的继承层次结构和类型A的已实现接口.

b.GetType() == typeof(A)另一方面检查完全相同的类型.如果您没有进一步限定类型(即铸造),那么您将检查声明的b类型.

在任何一种情况下(使用上述任何一种情况),true如果b是A的确切类型,你将得到.

要小心知道为什么要在一种情况下使用精确类型而不是另一种情况:

  • 例如,检查确切类型会破坏您可能不希望最终完成的OO多态性的目的.
  • 但是,例如,如果您正在实施一个专门的软件设计模式,如Inversion of Control IoC容器,那么您有时希望使用精确类型.

编辑:

在你的例子中,

if(b is A) // this should return false
Run Code Online (Sandbox Code Playgroud)

使用以下方法将其转换为精确声明的类型检查

if (b.GetType() == typeof(A))
Run Code Online (Sandbox Code Playgroud)


Ale*_* LE 8

使用:

if (b.GetType() == typeof(A)) // this returns false
Run Code Online (Sandbox Code Playgroud)