【发布时间】:2015-07-14 07:19:11
【问题描述】:
我正在尝试找到一种从通用基类派生类的方法。说:
sealed public class Final : Base<Something>
{
}
public class Base<T> : T
where T : Anything // <-- Generics do not allow this
{
}
在 C# 中这似乎是不可能的。
还有其他解决方案可以实现类似的效果吗?
我找到了这个StackOverflow question,但它似乎并没有解决问题,或者至少我不明白它应该如何解决。
编辑:
我希望得到的结果是能够做这样的事情:
Anything[] anything;
//Assign some Instances to anything
foreach(Final final in anything){
//do something with final
}
【问题讨论】:
-
如果你想在
foreach中使用它,你需要实现IEnumerable<Final>。 -
@juharr 在我上面的编辑中,“任何东西”是一个数组。所以我不需要这样做。
-
@juharr 只需一个
MoveNext和Current方法就足够了,无需实现整个IEnumerable接口。 -
您想要做的事情在逻辑上不合理,也不会奏效。当它的值在运行时建立时,您不能从类型参数派生。例如,您如何知道可以覆盖哪些方法?我认为您需要重新考虑您的设计,以便您从
T的任何类型派生,然后在实例化Base时使用DerivedT,而不是尝试从Base<T>中的T派生。这有意义吗?
标签: c# generics inheritance dynamic