[英]Inheritance of generic type
讓我們假設我們有以下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> {/**/}
現在,我想創建泛型類“VehicleWheelCarrier”,它繼承自Vehicle,並且有一個參數,它是任何類型的輪:
abstract class VehicleWheelCarrier<TWheel> : Vehicle where TWheel:VehicleWheel
不幸的是,這不能編譯,因為VehicleWheel需要參數。
怎么解決?
您需要第二個通用參數來定義所需的類型:
public abstract class VehicleWheelCarrier<TWheel, U> : Vehicle
where TWheel:VehicleWheel<U>
where U : Vehicle { }
編輯:這將阻止您制作如下的荒謬結構:
class BusWheelCarrier : VehicleWheelCarrier<BusWheel, Truck>{ }
有錯誤:
從
BusWheel
到VehicleWheel<Truck>
沒有隱式引用轉換。
但這會奏效:
class BusWheelCarrier : VehicleWheelCarrier<BusWheel, Bus>{ }
您可以像這樣為輪子添加非通用基礎:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.