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)