泛型是允许用户使用占位符定义类和方法的类。泛型已添加到C#语言的2.0版中。使用泛型的基本思想是允许类型(整数,字符串,…等和用户定义的类型)成为方法,类和接口的参数。集合的主要限制是缺乏有效的类型检查。这意味着您可以将任何对象放入集合中,因为C#编程语言中的所有类都从对象基类扩展而来。这损害了类型安全性,并且与C#作为类型安全语言的基本定义相矛盾。此外,使用集合会涉及大量的性能开销,这些形式的开销是隐式和显式类型转换的形式,这是从集合添加或检索对象所必需的。
为了解决类型安全问题, .NET框架提供了泛型来创建类,结构,接口和方法,这些类,结构,接口和方法为其使用的类型具有占位符。泛型通常用于为引用和值类型创建类型安全的集合。 .NET框架在System.Collections.Generic命名空间中提供了一组广泛的接口和类,用于实现通用集合。
通用类
C#中的泛型是它最强大的功能。它允许您定义类型安全的数据结构。结果是显着的性能提升和高级代码,因为它有助于重用数据处理算法,而无需复制特定于类型的代码。泛型类似于C++中的模板,但实现和功能不同。泛型引入了类型参数的概念,因此可以创建推迟数据类型框架的方法和类,直到该类或方法被声明并由客户端代码实例化为止。泛型类型比常规系统类型具有更好的性能,因为它们减少了装箱,拆箱和类型转换变量或对象的需求。
参数类型是在通用类创建中指定的。
要创建通用类的对象,请使用以下语法:
BaseType obj = new BaseType ()
例子:
// C# program to show working of
// user defined Generic classes
using System;
// We use < > to specify Parameter type
public class GFG {
// private data members
private T data;
// using properties
public T value
{
// using accessors
get
{
return this.data;
}
set
{
this.data = value;
}
}
}
// Driver class
class Test {
// Main method
static void Main(string[] args)
{
// instance of string type
GFG name = new GFG();
name.value = "GeeksforGeeks";
// instance of float type
GFG version = new GFG();
version.value = 5.0F;
// display GeeksforGeeks
Console.WriteLine(name.value);
// display 5
Console.WriteLine(version.value);
}
}
输出 :
GeeksforGeeks
5
说明:前面的示例定义了一个通用类GFG ,它使用通用类型参数’T’。在Main()方法中,通过将’T’替换为’ 字符串’和’float’数据类型,创建了GFG的两个实例。这些对象分别用于存储’ 字符串’和’float’值。 GFG类通过在其构造函数中接受所需的类型来确保类型安全。
具有各种参数的泛型方法:正如方法可以采用一个参数一样,泛型也可以采用各种参数。可以将一个参数作为熟悉的类型传递,将另一个作为泛型类型传递,如下所示:
- 例子:
// C# program to show multiple // type parameters in Generics using System; public class GFG { // Generics method public void Display
(string msg, TypeOfValue value) { Console.WriteLine("{0}:{1}", msg, value); } } // Driver class public class Example { // Main Method public static int Main() { // creating object of class GFG GFG p = new GFG(); // calling Generics method p.Display ("Integer", 122); p.Display ("Character", 'H'); p.Display ("Decimal", 255.67); return 0; } } 输出 :
Integer:122 Character:H Decimal:255.67
泛型的特征
泛型是一种通过多种方式改进程序的技术,例如:
- 它可以帮助您进行代码重用,性能和类型安全。
- 您可以创建自己的通用类,方法,接口和委托。
- 您可以创建通用集合类。 .NET框架类库在System.Collections.Generic命名空间中包含许多新的通用集合类。
- 您可以在运行时获取有关通用数据类型中使用的类型的信息。
泛型的优势
- 可重用性:您可以在同一代码中为多个目的使用单个泛型类型定义,而无需进行任何更改。例如,您可以创建一个通用方法来添加两个数字。此方法可用于添加两个整数以及两个浮点数,而无需在代码中进行任何修改。
- 类型安全性:通用数据类型可提供更好的类型安全性,尤其是在集合的情况下。使用泛型时,您需要定义要传递给集合的对象的类型。这有助于编译器确保仅将定义中定义的那些对象类型传递给集合。
- 性能:与普通系统类型相比,泛型类型提供了更好的性能,因为它们减少了对变量或对象进行装箱,拆箱和类型转换的需要。