我一直在考虑解决问题的方法,我不确定它是否会起作用.
假设我们有一个名为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的基类.