簡體   English   中英

泛型類型的繼承

[英]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>{ }

有錯誤:

BusWheelVehicleWheel<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM