时间:2011-09-24 00:09:32

标签: c# oop entity-framework repository-pattern

我开始在tutorial之后实现存储库模式。现在在实现Repository接口的类的定义中。类的定义是这样的。

public class Repository<E,C> : IRepository<E,C>, IDisposable 
    where E : EntityObject
    where C : ObjectContext
{
}

如果我用泛型定义了一个类,为什么我需要输入where来解释哪些是预期的对象?我真的很困惑这个话题

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

发生的事情是泛型被约束为该类型或从该类型派生的任何类型。这样做是为了使某些方法,属性,事件,字段等可用于泛型,并防止使用与这些约束形式不匹配的类型。

您可以在MSDN上找到有关Generic Constraints

的更多信息

答案 2 :(得分:1)

where约束类型是一个慎重的选择,它有两个结果:

  1. 如果类型参数不满足这些约束,和返回
  2. ,编译器将不允许您编写实例化泛型的代码
  3. 它允许您在E的定义中将CEntityObject类对象用作ObjectContextRepository<,>;否则,它将不允许您访问这些类的成员(方法,属性等),因为它无法保证那些成员存在用于指定泛型的类型。

答案 3 :(得分:0)

  

为什么我需要输入在哪里解释哪些是预期的对象?

你没有说出预期的对象。您类型约束为从该对象类型派生的某种类型。但是,它可以是该对象的特定子类。

答案 4 :(得分:0)

您在那里定义了泛型类型约束 - 不是预期的类型。

以同样的方式,您可以要求特定类型,必须由您期望的类型实现的接口,基类,抽象类,或者您也可以将类型参数约束为引用类型({ {1}})。

此链接可能有用:Constraints on type parameters