派生和基础类型区分

Cra*_*aig 1 c#

可以说我们有以下代码

Base() { ... }

Derived : Base { ... }

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

    if(derivedInstance is Base)
    {
         DoStuff();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Pao*_*sco 5

尝试

if (derivedInstance.GetType() == typeof(Base)) {
    DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

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

class Base { 
    public virtual void DoStuff() {
        // actually do something
    }
}
class Derived { 
    public virtual override void DoStuff() {
        // do nothing
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用DoStuff()实例,而不检查它的类型.