c# – 显式运算符重载继承

我一直在考虑解决问题的方法,我不确定它是否会起作用.

假设我们有一个名为A的基类和3个子类B,C和D.

        A
        ^
-----------------
|       |       |
B       C       D

我们还有三个等级X,Y和Z.

在我的系统对象类型B,C,D作为类型A传递,通常我必须将类型B,C,D的对象转换为对象X,Y或Z(这不是演员,我手动转换他们,因为他们完全不同).

因此,要将对象类型A转换为类型X,Y或Z,我需要首先检查子类型,然后根据子类型使用关于A对象的一些操作的结果初始化X,Y或Z对象.

我想过将一个显式的强制转换操作从A重载到X,Y或Z只是做了我在转换它时所做的相同的过程,但后来我想……是否可以使用polimorfism并重载来自B的强制转换, C和D在某种程度上,当我添加一个新的AI子类型时,不需要更改A的强制转换代码?(只需将显式强制转换添加到新的子类型中)

如果有什么令人困惑的话,我希望我已经正确地解释了自己.

注意:我将为X,Y,Z添加一个强制转换

解决方法:

您可以让A类型的强制转换操作符调用A实例的虚拟(或抽象?)实例方法,并覆盖A的每个子类的方法.但是,X,Y和Z应该来自此解决方案的相互基类,但是,所以强制转换操作符可以将该基类作为结果类型.

public abstract class A
{
    protected abstract W ConvertToW();

    public static explicit operator W(A a)
    {
        return a.ConvertToW();
    }
}

在这个例子中,W是X,Y和Z的基类.

上一篇:c# – 派生类中的别名属性名称?


下一篇:Java ArrayList删除方法多态