使用泛型而不是继承的情况及其带来的好处是什么,如何最好地将它们组合在一起?

谢谢你们的回答。

我将尽力说明这个问题的动机:
我有一个如下所示的类(class):

class InformationReturn<T> where T : Info
{
    InformationReturn(Employee employee, List<T>) { ... }
}

现在假设我有一个采用InformationReturn参数的存储库,该存储库必须根据Info对象T的类型在数据库中插入不同的字段。最好为类型T创建不同的存储库吗?一个使用反射确定类型的存储库;还是有更好的方法在/泛型上使用继承功能?

注意:其他客户端代码也必须根据T的类型进行不同的操作。

最佳答案

他们真的是完全不同的想法。泛型允许您以通用方式声明通用的“特定”功能(冒着听起来矛盾的风险)。除了保存在内部的数据类型之外,List<int>的功能与List<string>相同。

尽管可以使用继承来做相同的事情,但是我可以创建一个List类,然后创建一个从其继承的IntListStringList类。我可以很容易地使这两个类的功能完全不同,或者使一个类提供另一种类不提供的功能。

编辑

在查看对问题的编辑后,答案排序为“取决于”。您可以为双方都做参数-实际上,LINQ to SQL和Entity Framework两者都是使用泛型的反射检查以及强类型实体类和其他存储库类的组合。您当然可以采用您正在研究的方法,只是知道,通常,可以通过反射或其他方法解决的问题很可能在通过“其他方法”解决时会更快。这取决于在性能,可维护性,可读性和可靠性之间要进行多少折衷。

10-05 23:04
查看更多