我有一个有趣的情况,某些事情正在工作,但其他事情却没有,我不知道为什么。下面是近似我的情况的代码。我在存储库中有一个静态的,它采用由对象的基本类型实现的泛型类型。然后,我有两个基于该泛型类型的派生类。派生类的第一级填充基类型的泛型参数并且工作正常,但是从填充泛型参数的类派生的任何类都不能代替它派生的基类。
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 调用)。我的猜测是扩展方法与类型参数问题有关,因为它需要找出类型。
任何想法为什么这不起作用和/或可以做些什么来解决它?