Mar*_*ero 5 c# polymorphism casting operator-overloading
我一直在考虑一种方法来解决我遇到的问题,但我不确定它是否有效。
假设我们有一个名为 A 的基类和 3 个子类 B、C 和 D。
A
^
-----------------
| | |
B C D
Run Code Online (Sandbox Code Playgroud)
我们还有 X、Y 和 Z 三个类。
在我的系统上,B、C、D 类型的对象作为 A 类型传递,通常我必须将 B、C、D 类型的对象转换为对象 X、Y 或 Z(这不是强制转换,我手动转换它们,因为它们是完全不同的)。
因此,要将对象类型 A 转换为类型 X、Y 或 ZI,需要首先检查子类型,然后根据子类型对 A 对象进行一些操作的结果来初始化 X、Y 或 Z 对象。
我考虑过重载从 A 到 X、Y 或 Z 的显式转换操作,只需执行与转换它们时相同的过程,但后来我想...是否可以使用多态性并重载来自 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();
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,是,和W的基类。XYZ