【发布时间】:2011-01-08 16:59:47
【问题描述】:
最近我尝试通过实现一个泛型接口来创建一个泛型子类。
public interface IModule<T> where T : DataBean { ..... }
public class Module<T> : IModule<T> where T : DataBean { .... }
似乎我不能依赖基本接口中定义的任何 T 限制, 我需要自己重新声明它们。
MSDN 刚刚提供:
当使用子类泛型类型时 参数,你必须重复任何 基地规定的限制条件 子类级别的类级别。为了 例如,推导约束
为什么不能从基类/接口推断约束?
【问题讨论】:
-
约束不需要复制,也可以选择使用可以转换为父约束类型的东西,让子更专业。
-
C# 4.0 规范几乎说了同样的话(第 13.4.3 节),但没有提供原因。
-
如果我的子类中的泛型参数与基类中的泛型参数有矛盾的约束怎么办?
-
那么你会得到一个编译错误
标签: c# generics inheritance type-constraints