代码之家  ›  专栏  ›  技术社区  ›  Robotronx

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

  •  0
  • Robotronx  · 技术社区  · 6 年前

    我不能退换 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 回复  |  直到 6 年前
        1
  •  2
  •   Grax32    6 年前

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

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