c# - 泛型的继承

标签 c# .net oop generics inheritance

假设我们有以下类:

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/

相关文章:

c# - 无法在列表中创建文件夹

.net - web.config 超时和 IIS 超时有什么区别?

c# - 您知道哪些使用 Entity Framework 和 DbContext 的模式和实践?

.net - 最佳实践 : how should I store settings in C# (Format/Type)?

当对象调用从静态调用切换时,php-mysqli insert_id 返回 0 而不是最后一个 id

java - 强制一步步构建对象

c# - 观察并删除(截图),如果在Iphone中使用我的App时截图

c# - 如何格式化 DateTime 或 TimeZone/TimeZoneInfo 以显示三个字母?

java - 匿名类型的类型

c# - 尝试连接到sql数据库时出现权限错误