特定のことが機能しているのに他の機能が機能していないという興味深い状況があり、その理由はわかりません。以下は私の状況を概算するコードです。オブジェクトの基本型によって実装されるジェネリック型をとるリポジトリに静的なものがあります。次に、そのジェネリック型に基づいた2つのレベルの派生クラスがあります。派生クラスの第1レベルは、基本型のジェネリックパラメーターを入力し、正常に機能しますが、ジェネリックパラメーターを入力したクラスから派生したクラスは、派生元の基本クラスの代わりには機能しません。
public class Vehicle<TVehicleType, TStorage>
{
}
public class Car : Vehicle<Car, ParkingLot>
{
}
public class PickupTruck : Car
{
}
public class Dealership <TDrivableVehicle>
{
public static TDrivableVehicle GetVehicle<TVehicleType, TStorage>(TStorage lot)
where TDrivableVehicle : Vehicle<TVehicleType, TStorage>, new()
{
}
}
public class CarDealership : Dealership<Car>
{
public static Car GetDrivableVehicle(aCarParkingLot)
{
return Dealership.GetDrivableVehicle<Car, CarParkingLot>(aCarParkingLot); <-- Works fine
}
}
public class PickupTruckDealership : CarDealership
{
public static PickupTruck GetDrivableVehicle(aCarParkingLot)
{
return Dealership.GetDrivableVehicle<PickupTruck, CarParkingLot>(aCarParkingLot); <-- fails
}
}
PickupTruckがその汎用ベースを理解するという点では、特定の側面は正しく機能しているように見えますが、拡張機能(ここには示されていません)および型を型パラメーターに渡すことは特に機能しません(GetDrivableVehicle呼び出し)。私の推測では、拡張メソッドはタイプを把握する必要があるため、タイプパラメーターの問題に関連していると思います。
これが機能しない理由や、それを回避するために何ができるかについてのアイデアはありますか?