【发布时间】:2014-10-10 10:29:04
【问题描述】:
我正在尝试创建一个继承自另一个抽象泛型类的抽象泛型类。
这是我目前所拥有的
public abstract class BaseClass {
public long Id { get; private set; }
public BaseClass(long id) {
this.Id = id;
}
}
public abstract class BaseClass<T> : BaseClass where T : BaseClass {
protected BaseClass(long id)
: base(id) {
}
public static T Get(long id) {
T item;
return TryGet(id, out item) ? item : default(T);
}
public static bool TryGet(long id, out T item) {
item = null; // This is where I call the cache but for this example I've removed so it will compile
if (item != null) { return true; }
else {
// Call TryGetFallback method
return false;
}
}
protected abstract T TryGetFallback(long id);
}
public abstract class DerivedClass : BaseClass<DerivedClass> {
public String Name { get; private set; }
public DerivedClass(long id, String name)
: base(id) {
this.Name = name;
}
}
public class DerivedDerivedClass : DerivedClass {
protected override DerivedDerivedClass TryGetFallback(long id) {
// Handle the try get fallback
}
}
DerivedDerivedClass 上的 TryGetFallback 方法会导致编译器错误。
【问题讨论】:
-
DerivedDerivedClass 继承自 DerivedClass
,它继承自 DerivedClass,而 DerivedClass 继承自 BaseClass。您的链中没有 BaseClass ,因此,您的方法不在链中。 -
BaseClass<T>没有在任何地方使用! -
另外你确定你想让
BaseClass<T>的类型约束为BaseClass<T>,看起来有点……递归! -
嗨,DavidG,是的,我意识到了这一点,但我不知道如何将 BaseClass
放入链中。有任何想法吗?谢谢 -
递归,
BaseClass<T>表示T必须是BaseClass<T>,这意味着T是BaseClass<T>....而且它一直是海龟!
标签: c# generics inheritance