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