【发布时间】:2014-08-08 19:43:00
【问题描述】:
我有一个基础抽象类,它允许实现者返回不同的类型:
protected abstract T GetMyValue<T>();
我希望实现类能够执行以下操作:
T myResult;
public override T GetMyValue<T>()
{
return _myResult;
}
我希望调用者指定类型:
int i = obj.GetMyValue<int>();
这可能吗?
【问题讨论】:
-
是的...但是您需要为 T 提供合适的转换。您目前没有任何限制,如果我打电话给
GetMyValue<Flob>会怎样? -
对可以返回的类型有什么限制吗?当你可以说
int i = 5时,这似乎有点矫枉过正。你会在编译时或运行时知道返回类型吗? -
每个继承基类的类都有自己的一组约束
-
您是否希望具有
GetMyValue方法的给定类型能够返回任何类型,或者您是否希望类型A.GetMyValue只能返回某些类型和类型@ 987654328@ 只能返回其他不同的类型? -
这些方法可以返回任何类型,也可以在每个实现者将其限制为 2-4 种类型的情况下对其进行约束(对于这种情况来说,这没什么大不了的)。我知道如果我将 GetMyValue 更改为返回 Object,它会给我我想要的东西,但我试图使用泛型来代替主要是为了性能而不是类型检查。