C#如何检查基类是否是派生类的实例

Ima*_*sco 3 c# polymorphism inheritance

如何从基类内部检查它是否是派生类的实例:

class A0 : A {};
class A1 : A {};
class A2 : A {};

class A 
{
    void CheckDerived() 
    {
        if (this is A0) 
        {
            //Do something when instance is A0
        } 
        else if (this is A1) 
        {
            //Do something when instance is A1
        } 
        else if (this is A2) 
        {
            //Do something when instance is A2
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 5

问题中的代码应该可以满足您的要求,但是,正如 Danny Goodball 在他的评论中所写的那样,这是一种非常糟糕的做法。

根据打开/关闭原则,“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”,
针对不同子级处理不同动作的正确方法是使用覆盖:

使方法虚拟(作为抽象方法可能更好),并在每个派生类中用它自己的实现覆盖它:

class A
{
     virtual void CheckDerived() { throw new NotImplementedException(); }
}

class A0 : A
{
     override void CheckDerived() { Console.WriteLine("A0"); }
}

class A1 : A
{
     override void CheckDerived() { Console.WriteLine("A1"); }
}
Run Code Online (Sandbox Code Playgroud)