C# C语言中的多重继承与异构集合# 努力把C++中的某些东西翻译成C语言。

C# C语言中的多重继承与异构集合# 努力把C++中的某些东西翻译成C语言。,c#,c++,shared-ptr,multiple-inheritance,heterogeneous-array,C#,C++,Shared Ptr,Multiple Inheritance,Heterogeneous Array,我知道C#不支持真正的多重继承,但可以通过接口和组合来模拟 在C++中,我有一个设计,其中两个类从一个父类继承。假设Vehicle是父类,而Car和Boat继承自Vehicle 还有第二个类,从中派生出另外三个类。我们称之为许可证。另外三个类继承自三个车辆类和许可证类 所以我们有一些类似于: // C++ class Vehicle { public: virtual void move(); }; class Car : p

我知道C#不支持真正的多重继承,但可以通过接口和组合来模拟

在C++中,我有一个设计,其中两个类从一个父类继承。假设Vehicle是父类,而Car和Boat继承自Vehicle

还有第二个类,从中派生出另外三个类。我们称之为许可证。另外三个类继承自三个车辆类和许可证类

所以我们有一些类似于:

    // C++
    class Vehicle
    {
     public:
         virtual void move();
    };

    class Car : public Vehicle
    {
     public:
         void move();
    };

    class Boat : public Vehicle
    {
     public:
         void move();
    };

    class License
    {
     public:
          void renew(); 
    };

    class LicensedVehicle : public Vehicle, public License {...};
    class LiscensedCar : public Car, public License {...};
    class LisencedBoat : public Boat, public License {...};
    // C#  
    class Vehicle
    {
         public virtual void move();
    }

    class Car : Vehicle
    {
     public override void move();
    }

    class Boat : Vehicle
    {
     public override void move();
    }

    interface ILicense
    {
      void renew();
    }        

    class License : ILicense
    {
     public void renew(); 
    }

    class LicensedVehicle : Vehicle, ILicense 
    {
         License l;

         void ILicense.renew()
         {
              l.renew();
         }
    }

    class LiscensedCar : Car, ILicense {...}
    class LisencedBoat : Boat, ILicense {...}
现在,在我的主要方法中,我可以为上面的三个乘法继承类创建对象,并将它们添加到两个指针数组中,一个是Vehicle类型,另一个是License类型。然后,我可以从一个阵列访问车辆的一半功能,从另一个阵列访问许可证功能。例如:

    // C++
    Vehicle* VehicleHeteroArray[3];
    License* LiscenseHeteroArray[3];

    LisencedVehicle* lvPtr = new LisencedVehicle();
    LisencedCar* lcPtr = new LisencedCar();
    LisencedBoat* lbPtr = new LisencedBoat();

    VehicleHeteroArray[0] = lvPtr;
    LiscenseHeteroArray[0] = lcPtr;

    VehicleHeteroArray[1] = lcPtr;
    LiscenseHeteroArray[1] = lcPtr;

    VehicleHeteroArray[2] = lbPtr;
    LiscenseHeteroArray[2] = lbPtr;
现在,我可以循环使用这两个数组并访问车辆和许可证中的每个方法。例如:

    // C++
   for (int i = 0; i < 3; i++)
   {
      VehicleHeteroArray[i].move();
      LiscenseHeteroArray[i].renew();
   }

我知道我可以创建一个异构数组的类型的车辆和Access MOVER(),但是有没有一种方法可以让异类集合也能访问续订(),就像我在C++中用LISCESSIAdSalaby[]?/P>仅仅有一个ILICONCE数组有什么不对?哦,我没有考虑过。我到家后会试试的。谢谢@immibis!