gpt4 book ai didi

c# - 显式运算符重载 + 继承

转载 作者:太空狗 更新时间:2023-10-30 00:43:27 25 4
gpt4 key购买 nike

我一直在想办法解决我遇到的问题,但我不确定它是否可行。

假设我们有一个名为 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 以某种方式,当我添加 A 的新子类型时,我不需要更改 A 的转换代码?(只需将显式转换重载添加到新子类型)

我希望我已经正确地解释了自己,如果有什么令人困惑的地方,我深表歉意。

注意:我将为 X、Y、Z 添加一个转换重载

最佳答案

假设X、Y、Z派生自同一个类型T,在A中声明一个抽象转换方法

public abstract class A
{
public abstract T Convert();
}

并在 B 中覆盖它以返回 X,在 C 中覆盖它以返回 Y,在 D 中覆盖它以返回 Z。这样,每个类型都负责返回其自己的转换类型,并且当 a添加了新类型。

关于c# - 显式运算符重载 + 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com