根据子类从基类指定抽象方法的返回类型

And*_*ech 12 c# generics polymorphism abstract-class overriding

我有以下结构:

abstract class Base {
        public abstract List<...> Get(); //What should be the generic type?
}

class SubOne : Base {
    public override List<SubOne> Get() {

    }
}

class SubTwo : Base {
    public override List<SubTwo> Get() {

    }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个抽象方法,返回具体子类的任何类.因此,正如您从示例中看到的那样,方法SubOne应返回,List<SubOne>而方法SubTwo应该返回List<SubTwo>.

我在Base类中声明的签名中指定了什么类型?


[UPDATE]

谢谢你发布的答案.

解决方案是使抽象类具有通用性,如下所示:

abstract class Base<T> {
        public abstract List<T> Get();
}

class SubOne : Base<SubOne> {
    public override List<SubOne> Get() {

    }
}

class SubTwo : Base<SubTwo> {
    public override List<SubTwo> Get() {

    }
} 
Run Code Online (Sandbox Code Playgroud)

rec*_*ive 26

您的抽象类应该是通用的.

abstract class Base<T> {
        public abstract List<T> Get(); 
}

class SubOne : Base<SubOne> {
    public override List<SubOne> Get() {

    }
}

class SubTwo : Base<SubTwo> {
    public override List<SubTwo> Get() {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果需要引用不带泛型类型参数的抽象类,请使用接口:

interface IBase {
        //common functions
}

abstract class Base<T> : IBase {
        public abstract List<T> Get(); 
}
Run Code Online (Sandbox Code Playgroud)