是允许用户使用占位符定义类和方法的类。泛型已添加到C#语言的2.0版中。使用Generic的基本思想是允许类型(整数, 字符串, …等和用户定义的类型)成为方法, 类和接口的参数。集合的主要限制是缺乏有效的类型检查。这意味着你可以将任何对象放入集合中, 因为C#编程语言中的所有类都从对象基类扩展而来。这损害了类型安全性, 并且与C#作为类型安全语言的基本定义相矛盾。此外, 使用集合会涉及显着的性能开销, 这些形式的隐式和显式类型转换需要从集合中添加或检索对象。
为了解决类型安全问题,
。净
框架提供了泛型来创建类, 结构, 接口和方法, 这些类, 结构, 接口和方法为其使用的类型使用占位符。泛型通常用于为引用和值类型创建类型安全的集合。的
。净
框架在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<T> {
// 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< string > name = new GFG< string >();
name.value = "lsbin" ;
// instance of float type
GFG< float > version = new GFG< float >();
version.value = 5.0F;
// display lsbin
Console.WriteLine(name.value);
// display 5
Console.WriteLine(version.value);
}
}
输出:
lsbin
5
说明:前面的示例定义了一个通用类, 玻璃纤维, 它使用通用类型参数" T"。在Main()方法中, 通过将" T"替换为" string"和" float"数据类型创建了GFG的两个实例。这些对象分别用于存储"字符串"和"浮动"值。 GFG类通过在其构造函数中接受所需的类型来确保类型安全。
具有各种参数的通用方法:正如方法可以采用一个参数一样, 泛型也可以采用各种参数。可以将一个参数作为熟悉的类型传递, 将另一个作为泛型类型传递, 如下所示:
例子:
// C# program to show multiple
// type parameters in Generics
using System;
public class GFG {
// Generics method
public void Display<TypeOfValue>( 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< int >( "Integer" , 122);
p.Display< char >( "Character" , 'H' );
p.Display< double >( "Decimal" , 255.67);
return 0;
}
}
输出:
Integer:122
Character:H
Decimal:255.67
泛型的特征
泛型是一种通过多种方式改进程序的技术, 例如:
- 它可以帮助你进行代码重用, 性能和类型安全。
- 你可以创建自己的通用类, 方法, 接口和委托。
- 你可以创建通用集合类。 .NET框架类库在System.Collections.Generic命名空间中包含许多新的通用集合类。
- 你可以在运行时获取有关通用数据类型中使用的类型的信息。
泛型的优势
- 可重用性:你可以在同一代码中将单个通用类型定义用于多个目的, 而无需进行任何更改。例如, 你可以创建一个通用方法来添加两个数字。此方法可用于添加两个整数以及两个浮点数, 而无需在代码中进行任何修改。
- 类型安全:通用数据类型提供了更好的类型安全性, 尤其是在集合的情况下。使用泛型时, 你需要定义要传递给集合的对象的类型。这有助于编译器确保仅将定义中定义的那些对象类型传递给集合。
- 性能:与普通系统类型相比, 泛型类型提供了更好的性能, 因为它们减少了对变量或对象进行装箱, 拆箱和类型转换的需要。