我开始在tutorial之后实现存储库模式。现在在实现Repository接口的类的定义中。类的定义是这样的。
public class Repository<E,C> : IRepository<E,C>, IDisposable
where E : EntityObject
where C : ObjectContext
{
}
如果我用泛型定义了一个类,为什么我需要输入where
来解释哪些是预期的对象?我真的很困惑这个话题
答案 0 :(得分:1)
答案 1 :(得分:1)
发生的事情是泛型被约束为该类型或从该类型派生的任何类型。这样做是为了使某些方法,属性,事件,字段等可用于泛型,并防止使用与这些约束形式不匹配的类型。
您可以在MSDN上找到有关Generic Constraints。
的更多信息答案 2 :(得分:1)
用where
约束类型是一个慎重的选择,它有两个结果:
E
的定义中将C
和EntityObject
类对象用作ObjectContext
和Repository<,>
;否则,它将不允许您访问这些类的成员(方法,属性等),因为它无法保证那些成员存在用于指定泛型的类型。答案 3 :(得分:0)
为什么我需要输入在哪里解释哪些是预期的对象?
你没有说出预期的对象。您将类型约束为从该对象类型派生的某种类型。但是,它可以是该对象的特定子类。
答案 4 :(得分:0)
您在那里定义了泛型类型约束 - 不是预期的类型。
以同样的方式,您可以要求特定类型,必须由您期望的类型实现的接口,基类,抽象类,或者您也可以将类型参数约束为引用类型({ {1}})。
此链接可能有用:Constraints on type parameters