gpt4 book ai didi

c# - 多重继承和 C#

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

假设我有两个功能完全不同的基本抽象类:笔记本电脑和智能手机。 (假设功能完全不同)。在我当前的项目中,我已经有很多笔记本电脑和智能手机的实现,它们总是完全不同。

但突然我收到一个请求,要求添加一个实现 pc-tablet 的类,它实际上具有智能手机和笔记本电脑的功能。更改基类为时已晚,实际上我非常确定此 pc-tablet 只会出现一次。

问题是,我应该能够将我的 pc-tablet 包含在智能手机的容器中,但它也应该是笔记本电脑,因为继承的功能(实际上除此之外,在项目的某些部分 pc-tablet 是仅用作笔记本电脑,不需要智能手机功能。此外,对于项目的特定部分,将 pc-tablet 视为智能手机是不好的)。所以我有 PcTabletAsLaptop :笔记本电脑类,实际上是笔记本电脑,而不是智能手机。

我的解决方案是添加一个包装器:

class PcTablet : SmartPhone
{
private PcTabletAsLaptop _pcTablet;

// Here goes all the methods of PcTabletAsLaptop as proxies:

public void Call(int number)
{
_pcTablet.Call(number);
}

// .....
}

有 200 多种方法,我希望它们从 PcTabletAsLaptop 自动生成。

这个解决方案看起来很复杂。我的问题是这很好,或者也许有一些更简单的方法可以做到这一点?

最佳答案

您可以从 SmartPhone 和 Laptop 中提取一个接口(interface),然后创建第三个接口(interface) PcTablet,它将继承前两个接口(interface)。这样,您就可以将 PcTablet 用作智能手机或笔记本电脑。

编辑:

为了能够在每个智能手机和笔记本电脑中重用逻辑,您可以使用适配器模式,因此 PcTablet 应该看起来像这样:

public class PcTablet :ISmartPhone, ILaptop
{
private SmartPhone _smartphone;
private Laptop _laptop;
public void ISmartPhone.Call()
{
_smartPhone.Call();
// OR IMPLEMENT THE RIGHT BEHAVIOR
//INSTEAD OF CALLING _smartPhone.Call()
}
}

当然,您必须在构造函数中创建智能手机和笔记本电脑,但它应该可以解决问题!这样,您将能够在笔记本电脑和智能手机中重用代码,但也可以在它们未提供正确代码的情况下覆盖它们的行为。

关于c# - 多重继承和 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11260149/

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