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

时间:2018-07-05 14:41:09

标签: c# inheritance polymorphism

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

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
        }
    }
}

2 个答案:

答案 0 :(得分:2)

问题中的代码应该执行您想要的操作,但是,正如Danny Goodball在评论中所写的那样,这是非常糟糕的做法。

根据open/close principle,指出“软件实体(类,模块,函数等)应打开以进行扩展,而关闭以进行修改”,
处理不同孩子的不同动作的正确方法是使用覆盖:

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

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

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

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

答案 1 :(得分:-1)

您应该使用类类型和IsAssignableFrom方法来完成此操作

Sequelize.where(
      Sequelize.fn('parse_input', Sequelize.col('address')), {
        [Op.iLike]: Sequelize.fn('parse_input', '%some filter%')
      })
相关问题