当前位置 : 主页 > 手机开发 > 其它 >

多重继承和C#

来源:互联网 收集:自由互联 发布时间:2021-06-19
假设我有两个具有完全不同功能的基本抽象类:笔记本电脑和智能手机. (假设功能完全不同).在我目前的项目中,我已经有很多笔记本电脑和智能手机的实现,而且它们总是完全不同. 但是
假设我有两个具有完全不同功能的基本抽象类:笔记本电脑和智能手机. (假设功能完全不同).在我目前的项目中,我已经有很多笔记本电脑和智能手机的实现,而且它们总是完全不同.

但是突然我收到了一个添加一个pc-tablet实现的类的请求,它实际上具有智能手机和笔记本电脑的功能.改变基类已经太晚了,实际上我非常确定这款平板电脑只会出现一次.

问题是,我应该可以在智能手机的外壳中包含我的PC平板电脑,但它也应该是笔记本电脑,因为继承的功能(实际上除此之外,在项目的某些部分,pc-tablet仅用作笔记本电脑,它不需要智能手机功能.此外,将PC平板电脑视为项目特定部分的智能手机是不好的.所以我有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和EX中提取界面.笔记本电脑然后创建第三个接口PcTablet将继承前两个.这样,您就可以将PcTablet用作智能手机或笔记本电脑.

编辑:

为了能够重用每个SmartPhone内部的逻辑和笔记本电脑你可以使用适配器模式,所以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()
     }
}

当然,您必须在构造函数中创建智能手机和笔记本电脑,但它应该可以做到!这样,你就可以重用笔记本电脑中的代码. SmartPhone也会在他们没有提供正确的行为的情况下覆盖他们的行为.

网友评论