什么时候用泛型和继承合适?使用泛型而不是继承的情况及其相关的好处,反之亦然,它们应该如何最好地结合起来?谢谢您的回答。我将尝试说明这个问题的动机:我有一个看起来像这样的类:classInformationReturnwhereT:Info{InformationReturn(Employeeemployee,List){...}}parameter,它必须根据Info对象T的类型在数据库中写入不同的字段。是否为T类型创建不同的存储库更好?一种使用反射来确定类型;还是有更好的方法在泛型上使用继承功能?注意:其他客户端代码也必须根据T的类型进行不同的操作。它们是完全不同的想法。泛型允许您以通用方式声明常见的“特定”函数(冒着发出React的风险)。除了内部存储的数据类型不同外,List与List也有所不同。虽然继承可以用来做同样的事情,但我可以创建一个List类,然后是一个IntList和一个继承它的StringList类。我可以很容易地使两个类的功能完全不同,或者提供另一个类中没有的功能。编辑查看问题的编辑后,答案的顺序是“视情况而定”。您可以为双方都设置参数——事实上,LINQtoSQL和实体框架都结合使用泛型和强类型实体类和其他存储库类的反射检查。你当然可以采取你看到的方法,只要知道,一般来说,一个可以通过反射或其他方式解决的问题,当通过“其他方式”解决时可能会更快。这取决于您希望在性能、可维护性、可读性和可靠性之间进行多少权衡。泛型和继承是两个不同的东西。继承是一个OOP概念,而泛型是一个CLR特性,允许您为在编译时公开它们的类型指定类型参数。继承和泛型实际上可以很好地协同工作。遗产:继承允许我创建一个类型:classPen{}然后创建另一个扩展Pen的类型:classFountainPen:Pen{}这很有用,因为我可以重用基类的所有状态和行为并公开任何新的在FountainPen行为或状态中。继承使我能够快速创建现有类型的更具体版本。泛型:泛型是一个CLR函数,可以让我创建这样的类型:classFoo{publicTBar{get;();现在,因为我已经指定T应该是我刚创建的对象的int,所以Foo.Bar的类型也将是int,因为它被声明为T类型。使用泛型来指定算法的行为或类型可以是由某种“未知类型”表示,同时保留根据该未知类型强类型化的API。未知类型称为类型参数,在代码中表示如下:publicclassList{publicvoidAdd(Titem)}(etc)-这里T是类型参数。泛型方法类似:publicvoidFoo(Titem)调用代码指定它要使用的类型参数,例如Listlist=newList();list.Add("嗨");使用继承来专门化类型的行为。我真的想不出它们在很多地方可以相互替代......我认为当你只想将相同的功能应用于各种类型(添加,删除,计数)并且它的行为方式相同时,你应该使用泛型完成。继承是指您需要相同的功能(GetResponse)但希望以不同的方式实现它。当您想创建一个可以应用于许多未知类样式的“模板”时,请使用泛型。例如。收藏???非常适合仿制药。继承意味着当你有一个基本的截锥体时,孩子“是”这个概念的延伸。我的一般继承规则更多地是关于“is-a”(青蛙是动物),而泛型是关于创建作用于类型化数据的容器(T的列表、T的处理程序等)。它们并不相互排斥。如果你愿意,你可以:publicclassBase{}publicclassDerived:Base{}继承和参数化类型都不能在运行时改变。继承允许您为操作提供默认实现并允许子类覆盖它们。参数化类型允许您更改类可以使用的类型。但哪种方法最好取决于您的设计和实现约束ElementsofDesignPatternsforReusableObject-OrientedSoftware以上是C#学习教程:什么时候使用泛型和继承合适?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
