当前位置: 首页 > 编程语言 > C#

为什么C#和VB都有泛型?他们提供什么好处?泛型,FTW分享

时间:2023-04-10 12:37:46 C#

为什么C#和VB都有泛型?他们提供什么好处?泛型,来自维基百科的FTW:泛型编程是一种计算机编程风格,其中算法是根据要指定的后续类型编写的,然后在需要时使用作为参数提供的特定类型进行实例化,它由1983年出现的Ada开创。这种方法允许编写仅在使用时对不同类型集进行操作的通用函数或类型,从而减少重复。泛型提供了定义稍后指定的类型的能力。您不必将项目转换为类型即可使用它们,因为它们已经被键入。为什么C#和VB有泛型?他们提供什么好处?使用它们有什么好处?还有哪些语言也有泛型?C#和VB具有泛型以利用底层CLR中的泛型支持(或相反?)。它们允许您使用可应用于多种类型的静态类型语言编写代码,而无需为您在其中使用它们的每种类型重写代码(运行时将为您完成)或以其他方式使用System.Object并在任何地方转换它(就像我们对ArrayList所做的那样)。你读过这篇文章吗?这些语言也有泛型:个人认为它们可以节省很多时间。我仍在使用.NETFramework1.1,每次我需要一个特定的集合时,我都需要通过实现CollectionBase创建一个强类型的集合。使用泛型,您只需像List一样声明您的集合并完成它。考虑这些方法签名://OldandbustedpublicabstractclassEnum{publicstaticobjectParse(TypeenumType,stringvalue);}//调用它:MyEnumx=(MyEnum)Enum.Parse(typeof(MyEnum),someString);//新的常规公共抽象类Enum{publicstaticTParse(stringvalue);}//调用它:MyEnumx=Enum.Parse(someString);看马:没有运行时类型操作。来自MSDN:泛型为早期版本的公共语言运行时和C#语言提供了一个有限的解决方案,其中泛化是通过将类型转换为公共基类型的对象来实现的。通过创建泛型类,您可以在编译时创建类型安全的集合。阅读本文的其余部分,了解泛型如何提高代码可读性和性能的一些示例。可能最常见的用途是拥有强类型的ArrayList。在.NET1.1中,您要么必须将所有对象从对象转换为所需的类型,要么使用类似CodeSmith的工具来生成强类型的ArrayList。另外,它们有助于减少拳击。此外,在.NET1.x中,如果您尝试使用具有值类型的ArrayList,您最终会在各处装箱和拆箱对象。泛型通过让您定义类型(无论是引用还是值)来避免这种情况。它们还有其他方便的用途、事件处理程序、LINQ查询等。.NET中的泛型非常适合对象集合。您可以随心所欲地定义您的对象类型,并且您可以拥有一个List而无需为其编写任何代码,并且可以访问.NETListgenerics集合的所有高效功能,同时对于T是类型安全的。这是好东西。如果您熟悉泛型,泛型是基于C++模板的概念。这是一种实现算法或数据结构但延迟使用其实际类型的方法。然后可以为列表分配任何类型的int、字符串甚至自定义类型,在构建列表时分配类型。但是你可以使用列表操作来添加删除等。通过习惯泛型,你真的可以节省很多编码工作。而且您不必在类型之间包装和拆箱。Java也有泛型。它们被称为通配符。.NET中的泛型,如继承和扩展方法,可以减少代码重复。让我通过重构来解释。如果具有共同祖先的所有类都有公共方法,则将公共方法放在类的共同祖先中(继承)。如果某个类有一个使用公共契约来实现某些结果的公共方法,则使该公共方法成为该公共契约的扩展方法。将方法或类收集到泛型中,如果它们具有相同的代码,只是根据所采用的类型不同(特别是如果类型的细节与方法的操作无关)。它们提高了使用值类型的集合的性能,因为不需要装箱/拆箱。它们使用起来更简洁,因为您不必将对象(例如使用ArrayList)转换为所需的类型——它们再次有助于强制类型安全。与C#中的非泛型类型相比,泛型(不是Java,这是另一回事)的最大优势在于它们速度更快。JIT生成它可以为给定类型提供的最佳机器代码。列表实际上是一个整数列表,而不是包装整数的整数对象。这使得泛型类型非常快并且类型安全,这有助于您在编译时检测到很多错误:)常见的例子是集合。例如,一组T类、A??dd(T)方法和Tget()方法。相同的代码,不同类型的安全集合。C++、D、Ada和其他语言都有模板、泛型的超集,它们会做一些不同的错误以获得相同的最终结果(然后是一些)。IIRCJava有泛型,但我不做Java。最简单的解释方法是举个例子。假设您需要两个哈希表,一个将字符串类型的对象映射到int类型,另一个将字符串类型的对象映射到double类型。您可以定义Hashtable,然后使用K和V类型。没有泛型,你必须使用“对象”类型,它除了必须强制转换外,还放弃了类型安全。只需实例化Hashtable和Hashtable,您就会得到一个具有正确类型检查的哈希表。Java也有泛型。C++有模板。像Perl和Javascript这样的动态语言没有相同的类型限制,因此它们以更少的工作量获得了大部分相同的好处。在Objective-C中,您使用协议来实现通用对象。但是,由于该语言是弱类型的,因此在使用一个代码路径处理多种类型时通常不会像处理类型系统那样成为问题。我个人非常喜欢泛型,因为我不必编写所有代码。什么是控制反转?以上是C#学习教程:为什么C#和VB都有泛型?他们提供什么好处?泛型,FTW分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: