我有一个简单的工厂方法,它提供了一个基于提供的泛型类型参数的具体实现实例。如果具体类继承自具有类型参数的公共抽象基类,我无法强制转换它们。编译器告诉我Error 2 Cannot convert type 'Car' to 'VehicleBase<T>'
。如果我将抽象类替换为具有相同类型参数的接口,或者我从抽象类中删除泛型类型参数,它工作正常。
interface IWheel
{
}
class CarWheel : IWheel
{
}
abstract class VehicleBase<T>
{
}
class Car : VehicleBase<CarWheel>
{
}
class VehicleFactory
{
public static VehicleBase<T> GetNew<T>()
{
if (typeof(T) == typeof(CarWheel))
{
return (VehicleBase<T>)new Car();
}
else
{
throw new NotSupportedException();
}
}
}
这无法在(VehicleBase<T>)new Car()
. 这是编译器缺陷,还是故意设计决定以不同的方式处理具有类型参数的抽象类和接口?
作为一种解决方法,我总是可以让抽象类实现一个接口并将其用作我的工厂方法的返回值,但我仍然想知道为什么会发生这种行为。