我有一个基本的抽象类,它旨在允许实现者返回不同的类型:

protected abstract T GetMyValue<T>();


我希望实现类能够执行以下操作:

T myResult;
public override T GetMyValue<T>()
{

     return _myResult;
}


我希望呼叫者指定类型:

int i = obj.GetMyValue<int>();


这可能吗?

最佳答案

一种选择是将字段存储为对象。这将导致对结构进行装箱,但是没有更重要的更改,没有更好的方法。

class Derived : Base
{
     private object o;

     protected override T GetMyValue<T>()
     {
        if (o is T)
           return (T)o;

        return default(T);
     }
}


除非抽象类本身是泛型的,否则不是真正的泛型字段,而不是特定的方法。当然,这是一个重大的设计更改。现在,一种实现只能返回一种类型。就像是

abstract class BaseClass<T>
{
    protected abstract T GetMyValue();
}

class Derived : Base<int>
{
    private int i;

    protected override int GetMyValue()
    {
        return i;
    }
}

09-11 20:21