c#无法从静态基类方法调用抽象泛型方法

时间:2014-10-10 15:28:41

标签: c# generics

我有一个带有静态方法的基类,我想将其称为抽象泛型方法,但无法解决如何执行此操作。

这与前面提到的问题不同,我无法从基类的静态方法访问TryGetFallback抽象方法。

我到目前为止的代码如下。

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, new() {
    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; // Try to get item from cache here
        if (item != null) { return true; }
        else {
            // Item not in cache so call TryGetFallback to attempt to retrieve it
            // Call TryGetFallback function
            // item = TryGetFallback(id);
            return item != null;
        }
    }

    protected abstract T TryGetFallback(long id);
}

public class DerivedClass : BaseClass<DerivedClass> {

    public DerivedClass() : base(0) {

    }

    protected override DerivedClass TryGetFallback(long id) {
        throw new NotImplementedException();
    }
}

我尝试将T实例化为新属性并从中调用TryGetFallback,但该方法不可用。

0 个答案:

没有答案