无法从重写的基类方法返回`this`

时间:2019-01-27 13:45:41

标签: c# generics inheritance

即使签名都适当,我也无法从具体的方法实现中返回this。这里的想法是拥有一个流畅的构建器,因此子类BuildNewCar()需要返回子类类型SimpleCarBuilder

public class Car {}

abstract class BaseCarBuilder
{
    public abstract T BuildNewCar<T>();
}

class SimpleCarBuilder : BaseCarBuilder
{
    Car _car;

    public override SimpleCarBuilder BuildNewCar<SimpleCarBuilder>()
    {
        _car = new Car();
        return this;
    }
}

我不断得到:

  

无法将类型'SimpleCarBuilder'隐式转换为'SimpleCarBuilder'

1 个答案:

答案 0 :(得分:2)

编译器将SimpleCarBuilder视为通用类型的名称,而不是要使用的实际类型。它无法将实际类型的SimpleCarBuilder转换为名为SimpleCarBuilder的通用类型参数,该参数实际上可以表示任何类型。

如果您使用实现抽象类功能,则会看到编译器使用T作为通用类型参数名称。