[英]Specifying the return type of an abstract method from a Base Class according to a Sub Class
我有以下結構:
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() {
}
}
我想創建一個抽象方法,它返回具體子 class 的任何 class 。 因此,從示例中可以看出, SubOne
中的方法應該返回List<SubOne>
而SubTwo
中的方法應該返回List<SubTwo>
。
我在 Base class 中聲明的簽名中指定什么類型?
[更新]
感謝您發布的答案。
解決方案是使抽象 class 通用,如下所示:
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() {
}
}
您的抽象 class 應該是通用的。
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() {
}
}
如果您需要引用沒有泛型類型參數的抽象 class,請使用接口:
interface IBase {
//common functions
}
abstract class Base<T> : IBase {
public abstract List<T> Get();
}
public abstract class Base<T>
{
public abstract List<T> Get();
}
class SubOne : Base<SubOne>
{
public override List<SubOne> Get() { return new List<SubOne>(); }
}
class SubTwo : Base<SubTwo>
{
public override List<SubTwo> Get() { return new List<SubTwo>(); }
}
我認為你不能讓它成為特定的子類。 你可以這樣做:
abstract class Base<SubClass> {
public abstract List<SubClass> Get();
}
class SubOne : Base<SubOne> {
public override List<SubOne> Get() {
throw new NotImplementedException();
}
}
class SubTwo : Base<SubTwo> {
public override List<SubTwo> Get() {
throw new NotImplementedException();
}
}
嘗試這個:
public abstract class Base<T> {
public abstract List<T> Foo();
}
public class Derived : Base<Derived> { // Any derived class will now return a List of
public List<Derived> Foo() { ... } // itself.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.