C#中的多重继承和异构集合

时间:2016-03-11 00:52:00

标签: c# c++ shared-ptr multiple-inheritance heterogeneous-array

努力完成一项旨在将C ++中的某些东西翻译成C#的作业。

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

在C ++中,我有一个设计,其中两个类从一个父类继承。让我们说车辆是父级,而Car和Boat继承自车辆。

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

所以我们有类似的东西:

CV_32S

现在在我的main方法中,我可以为上面三个乘法继承的类创建对象,并将它们添加到两个指针数组中,一个类型为Vehicle,另一个类型为License。然后,我可以从一个阵列访问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 {...};

现在我可以遍历这两个数组并访问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 ++中运行良好,所以我的问题是将其转换为C#。做任何类似的事情是否有合理的方式?

到目前为止,我已经设置了三个车辆类,并且我的三个车辆模拟了多重继承"通过执行以下操作设置类:

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

我知道我可以创建一个类型为Vehicle的异构数组并访问move(),但是有没有办法让异构集合也像我在C ++中使用LiscenseHeteroArray []那样访问renew()?

0 个答案:

没有答案