我有一个基本的抽象类,它旨在允许实现者返回不同的类型:
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;
}
}