检查继承的具体类型 类

Checking concrete type of inheriting classes

假设我有几个 classes:

public class BaseClass
{
    //....
}

public class ChildClassA : BaseClass
{
    //....
}

public class ChildClassB : BaseClass
{
    //....
}

现在我有另一个 class 使用上面的 child classes:

public class Program
{
    private Type _type;
    private ChildClassA _childA = GetChildClassA();
    private ChildClassB _childB = GetChildClassB();

    public void MethodOne()
    {
        if(_type == typeof(ChildClassA))
            DoSomething(_childA);
        else if(_type == typeof(ChildClassB))
            DoSomething(_childB);
    }

    public void MethodTwo()
    {
        if(_type == typeof(ChildClassA))
            DoSomething(_childA);
        else if(_type == typeof(ChildClassB))
            DoSomething(_childB);
    }
}

假设我在我的代码中一遍又一遍地在 MethodOneMethodTwo 中使用 if 子句,我怎样才能使它更干净?使用接口,我可以只声明一个 class 变量 IBaseClass 并为其分配 _childA_childB。但是对于继承的 classes,这是不可能的。还有其他方法可以得到相同的结果吗?所以基本上我会得到这样的结果:

public class Program
{
    private IBaseClass _child = GetChildClass();

    public void MethodOne()
    {
        DoSomething(_child);
    }

    public void MethodTwo()
    {
        DoSomething(_child);
    }
}

编辑:澄清一下,我不能使用接口,因为所有 classes 很久以前就已经实现了,重构它们将是一项艰巨的任务。所以我基本上是在寻找与 base 和 child classes.

类似的东西

EDIT2:这就是我对 HimBromBeere 的回答发表评论的意思:

private void DoSomething(BaseClass baseC)
{
    var childA = baseC as ChildClassA;

    if (childA != null)
        childA.DoSomethingA();

    var childB = baseC as ChildClassB;

    if(childA != null)
        childB.DoSomethingB();
}

您似乎想在运行时通过切换实际类型来指示使用哪种行为,这就是多态性的意义所在。

您不需要界面,因为您已经拥有一个公共基础-class。所以只需将 private IBaseClass _child = GetChildClass() 更改为 private BaseClass _child = GetChildClass():

public class Program
{
    private BaseClass _child = GetChildClass();

    public void MethodOne()
    {
        DoSomething(_child);
    }

    public void MethodTwo()
    {
        DoSomething(_child);
    }
}

这假设 DoSomething 只需要一个 BaseClass 作为参数。