派生和基础类型区分

时间:2012-02-27 14:29:10

标签: c#

让我们说我们有以下代码

Base() { ... }

Derived : Base { ... }

Main() 
{
    var derivedInstance = new Derived();

    if(derivedInstance is Base)
    {
         DoStuff();
    }
}

我们的if语句返回true。当我使用派生实例时,如何区分派生类型和基类型。

基本上,我希望上面的if语句返回false,但不确定如何完成此操作。

2 个答案:

答案 0 :(得分:5)

尝试

if (derivedInstance.GetType() == typeof(Base)) {
    DoStuff();
}

然而,这看起来很奇怪。你想做什么?
如何在基类中定义虚拟方法:

class Base { 
    public virtual void DoStuff() {
        // actually do something
    }
}
class Derived { 
    public virtual override void DoStuff() {
        // do nothing
    }
}

然后你可以在实例上调用DoStuff(),而无需检查它的类型。

答案 1 :(得分:1)

使用typeof检查实例的类型。

if (derivedInstance.GetType() == typeof(Base)) 
{
    DoStuff();
}

is检查实例是否属于类型或从中派生(如果参数为Interface,则实现Interface

MSDN:

  

is运算符用于检查对象的运行时类型是否与给定类型兼容。 is运算符用于表单

的表达式