假设我们有以下类:
abstract class Vehicle {/**/}
class Truck : Vehicle {/**/}
class Bus : Vehicle {/**/}
//etc...
abstract class VehicleWheel<TVehicle> where TVehicle : Vehicle {/**/}
class TruckWheel : VehicleWheel<Truck> {/**/}
class BusWheel : VehicleWheel<Bus> {/**/}
现在,我想创建通用类“VehicleWheelCarrier”,它继承自 Vehicle,并有 1 个参数,可以是任何类型的轮子:
abstract class VehicleWheelCarrier<TWheel> : Vehicle where TWheel:VehicleWheel
不幸的是,这无法编译,因为 VehicleWheel 需要参数。
如何解决?
最佳答案
你可以像这样为 wheel 添加一个非通用的基础:
abstract class Vehicle {/**/}
class Truck : Vehicle {/**/}
class Bus : Vehicle {/**/}
//etc...
abstract class VehicleWheelBase { internal VehicleWheelBase() { } /*Non-generic definitions of Wheel*/}
abstract class VehicleWheel<TVehicle> : VehicleWheelBase where TVehicle : Vehicle {/**/}
class TruckWheel : VehicleWheel<Truck> {/**/}
class BusWheel : VehicleWheel<Bus> {/**/}
abstract class VehicleWheelCarrier<TWheel> : Vehicle where TWheel : VehicleWheelBase
关于c# - 泛型的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48921446/