通用接口类签名

时间:2015-04-04 09:36:07

标签: c# entity-framework

我得到继承,我只是不明白为什么这个接口实现自己?

另外,请你解释一下这个大胆的部分有什么作用?为什么我不能只说出哪个T是IIdentifiableEntity,而不是所有逗号分隔的部分?

public interface IDataRepository<T> : IDataRepository
        **where T : class, IIdentifiableEntity, new()**

3 个答案:

答案 0 :(得分:3)

这里不止一个问题..我将逐一解决这些问题:

  

为什么这个界面实现了自己?

它没有。这里有两种类型..一种通用..一种非泛型。为什么它实现非泛型?谁知道..我们需要看到整个数据层才能理解。重要的是要认识到它们有两种类型。

  

为什么我不能只说出哪个T是IIdentifiableEntity

同样,这取决于您的使用案例。 class强制使用引用类型作为泛型参数。因此,您将无法创建IDataRepository<int>的实例。这在数据层中是有意义的。因为您通常希望保留整个对象/图形,并且它们通常是引用类型。 new()允许您在通用类型中使用var x = new T()。如果没有它,如果尝试实例化泛型类型参数的实例,则会出现编译器错误。

答案 1 :(得分:1)

为通用集合类或表示集合中的项的泛型类定义接口通常很有用。泛型类的优先选择是使用通用接口,例如IComparable而不是IComparable,以避免对值类型进行装箱和拆箱操作。 .NET Framework类库定义了几个通用接口,用于System.Collections.Generic命名空间中的集合类。 将接口指定为类型参数的约束时,只能使用实现该接口的类型。以下代码示例显示了从GenericList类派生的SortedList类。有关更多信息,请参阅泛型简介(C#编程指南)。 SortedList在T:IComparable中添加约束。这使得SortedList中的BubbleSort方法可以对列表元素使用通用的CompareTo方法。在此示例中,list元素是一个实现IComparable的简单类Person。 Read

答案 2 :(得分:1)

有2个不同的接口IDataRepository是通用的IDataRepository<T>,它是通用的,仅限于具有参数较少的构造函数并实现IIdentifiableEntity的类。当您的应用程序不仅与IDataRepository<T>绑定,而且您可能有另一个通用接口(如IDataRepository<T> where T: IEntity),并且在某些部分您希望将它们视为一个接口时,这非常有用

对于下一个问题,如果它只有where T : IIdentifiableEntity,您可以将另一个interfacestruct作为T传递,但架构师希望开发人员传递class参数构造函数为T