为什么C#和VB有泛型?他们提供了什么好处?仿制药

为什么C#和VB有泛型?他们提供了什么好处?仿制药,c#,.net,vb.net,generics,C#,.net,Vb.net,Generics,发件人: 泛型编程是一种编程风格 计算机编程 算法是根据 待以后指定的类型是 然后在需要时实例化 作为参数提供的特定类型 由Ada开创 1983年出版。这种方法 允许编写通用函数或 仅在组中不同的类型 它们在使用时操作的类型, 从而减少重复 泛型提供了定义稍后指定的类型的能力。您不必将项强制转换为类型来使用它们,因为它们已经被类型化了 为什么C#和VB有泛型?他们提供了什么好处?你发现使用它们有什么好处 还有哪些其他语言也有泛型?常见的例子是集合。e、 g.一组类型T,作为Add(T)方法和T

发件人:

泛型编程是一种编程风格 计算机编程 算法是根据 待以后指定的类型是 然后在需要时实例化 作为参数提供的特定类型 由Ada开创 1983年出版。这种方法 允许编写通用函数或 仅在组中不同的类型 它们在使用时操作的类型, 从而减少重复

泛型提供了定义稍后指定的类型的能力。您不必将项强制转换为类型来使用它们,因为它们已经被类型化了

为什么C#和VB有泛型?他们提供了什么好处?你发现使用它们有什么好处


还有哪些其他语言也有泛型?

常见的例子是集合。e、 g.一组类型T,作为Add(T)方法和T get()方法。相同的代码,不同的类型安全集合

C++、D、Ada和其他语言都有模板,这是一个泛型的超集,可以做一些不同的事情,但最终会得到相同的结果(还有一些)


IIRC Java有泛型,但我不做Java。

解释它最简单的方法是给出一个例子。假设您需要两个哈希表,一个将string类型的对象映射到int类型,另一个将string类型的对象映射到double类型。您可以定义Hashtable,然后使用K和V类型。如果没有泛型,您将不得不使用“object”类型,它除了必须强制转换为有意义之外,还放弃了类型安全性。只要实例化Hashtable和Hashtable,您就可以使用适当的类型检查和all来创建哈希表。

C#和VB都有泛型来利用底层CLR中的泛型支持(或者是另一种方式?)。它们允许您使用静态类型语言编写代码,该语言可以应用于多种类型,而无需为使用它们的每种类型重写代码(运行时将为您这样做),也无需使用System.Object和casting everywhere(就像我们使用ArrayList时所做的那样)

你看过报纸了吗

这些语言也有泛型:

  • C++(通过模板)
  • Ada(通过模板)
  • 埃菲尔
  • D(通过模板)
  • 哈斯克尔
  • 爪哇

    • Java也有泛型。C++有模板。< /P> 像Perl和Javascript这样的动态语言没有相同的类型限制,因此它们可以用更少的工作获得几乎相同的好处。

      来自:

      泛型提供了解决问题的方法 早期版本中的限制 公共语言运行库与C语言# 泛化语言 通过将类型转换为和来完成 从通用基类型对象。 通过创建泛型类,您可以 创建类型安全的集合 在编译时


      阅读那篇文章的其余部分,看看泛型如何提高代码的可读性和性能的一些例子。

      我个人认为,泛型可以节省大量时间。我仍然在使用.NET Framework 1.1,每次需要特定集合时,都需要通过实现CollectionBase来创建强类型集合。对于泛型,您只需像
      列表那样声明集合就可以了。

      它们最常用的用法可能是使用强类型的ArrayList。在.NET1.1中,您要么必须将所有对象强制转换为所需的类型,要么使用CodeSmith之类的工具来生成强类型的ArrayList

      此外,它们有助于减少。同样,在.NET1.x中,如果您尝试使用具有值类型的ArrayList,那么最终会在所有位置装箱和取消装箱对象。泛型通过允许您定义类型(无论是引用还是值)来避免这种情况


      它们还有其他方便的用途,如事件处理程序、LINQ查询等。

      NET中的泛型非常适合对象集合。您可以按照自己的意愿定义对象类型,并且能够拥有(比如)一个列表,而无需为此编写任何代码,并且能够访问.NET列表泛型集合的所有有效功能,同时对T来说是类型安全的。这是一个很好的东西。

      在objective-C中,您可以使用协议来实现泛型的目标。然而,由于语言的类型很弱,一般来说,当您在使用类型系统来使用许多类型的代码路径时,通常不需要关注。

      < p>泛型是在C++中用模板的概念建立的,如果您熟悉它们的话。 这是一种实现算法或数据结构的方法,但会延迟实际使用的类型

      然后,可以为列表分配您选择的任何类型int、string,甚至是在构建列表时分配的自定义类型。但您将能够使用列表操作添加删除等

      通过习惯泛型,您确实可以节省大量的编码工作。您不必在类型之间进行装箱和取消装箱


      Java也有泛型。它们被称为通配符。

      我个人非常喜欢泛型,因为我不需要编写所有代码


      与继承和扩展方法一样,.net中的泛型允许减少代码重复。让我通过重构的方式来解释

      如果所有具有公共祖先的类都有一个公共方法,则将该公共方法放在类的公共祖先(继承)中

      如果某些类有一个使用公共契约来实现某种结果的公共方法,则将该公共方法转换为该公共契约的扩展方法


      如果某些方法或类具有相同的代码,而这些代码仅因所作用的类型而异(特别是在类型的详细信息与方法的操作无关的情况下),请将这些方法或类收集到泛型中。

      它们提高了使用值类型的收集的性能,因为不需要装箱/拆箱。从你开始,它们就干净多了
      //Old and busted
      public abstract class Enum
      {
        public static object Parse(Type enumType, string value);
      }
      //To call it:
      MyEnum x = (MyEnum) Enum.Parse(typeof(MyEnum), someString);
      
      //New and groovy
      public abstract class Enum
      {
        public static T Parse<T>(string value);
      }
      
      //To call it:
      MyEnum x = Enum.Parse<MyEnum>(someString);