Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inheritance of generic type

Let's assume we have following classess:

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> {/**/}

Now, i want to create generic class "VehicleWheelCarrier", which is inherited from Vehicle, and has 1 parameter, which is any type of wheel:

abstract class VehicleWheelCarrier<TWheel> : Vehicle where TWheel:VehicleWheel

Unfortunatelly, this doesn't compile, as VehicleWheel requires parameter.

How to solve that?

like image 350
Jakub Szułakiewicz Avatar asked Jan 20 '26 04:01

Jakub Szułakiewicz


1 Answers

You may add a non-generic base for wheel like this:

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
like image 79
Aly Elhaddad Avatar answered Jan 21 '26 17:01

Aly Elhaddad



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!