C#中的泛型是啥意思?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的泛型是啥意思?相关的知识,希望对你有一定的参考价值。
泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,如下所示: // Declare the generic class public class GenericList<T> void Add(T input) class TestGenericList private class ExampleClass static void Main() // Declare a list of type int GenericList<int> list1 = new GenericList<int>(); // Declare a list of type string GenericList<string> list2 = new GenericList<string>(); // Declare a list of type ExampleClass GenericList<ExampleClass> list3 = new GenericList<ExampleClass>(); 使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。 泛型最常见的用途是创建集合类。 .NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList。 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。 可以对泛型类进行约束以访问特定数据类型的方法。 关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。 参考技术A (转)一、解析泛型 泛型其实主要是为了实现代码的重用,那么它是如何实现的呢?在CLR2.0中,实现了专门的IL指令支持泛型操作,具体编译过程为: (1)初次编译,首先生成IL代码和元数据,T只是作为类型占位符,不进行泛型类型的实例化。 (2)JIT编译,将以实际类型替换IL代码和元数据中的T占位符,并将其转换为本地代码,下一次对该泛型类型的引用将使用相同的本的代码。 注意:对于值类型和引用类型参数,泛型类型实例化有所不同。 (1)类型参数为值类型,JIT编译器为不同的值类型创建不同的本地代码 (2)类型参数为引用类型,共享本地代码的单个副本,这主要是因为引用类型变量都是指向托管堆的引用指针,对于指针完全可以使用相同的方式来操作。 二、基础概要 1、默认值 public T data; data = default(T);值类型的默认值为0,引用类型的默认值为null。对于结构类型,初始化为其成员相应的默认值。 2、约束 在定义泛型类时,对于能够用于实例化类型参数的类型所作的限制。 (1)T:new(),表示类型参数必须具有公共无参构造函数。当有多个约束存在时,new()约束置于最后。 (2)T:Class,表示类型参数必须是引用类型。 参考技术B 泛型就是用于处理算法、数据结构的一种编程方法。泛型的目标地采用广泛适用和可交互性的形式来表示算法和数据结构,以使他们能够直接用于软件构造。 参考技术C 泛型就是数据类型随意。 参考技术D 泛型就是可以匹配任意类型以上是关于C#中的泛型是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章