高级
泛型
前言
C# 中的泛型允许我们创建可以用于不同数据类型的单个类或方法。这种功能有助于代码的重用,提高代码的灵活性和类型安全性。下面我们将学习如何在 C# 中创建泛型类和泛型方法。
作用
泛型的主要作用是实现代码的复用和类型安全。通过泛型,我们可以编写一次代码,然后在不同的数据类型上重复使用,从而避免了重复编写类似代码的需要。
使用场景
- 数据类型统一处理:当需要编写能处理不同数据类型的代码时,泛型提供了一种统一的解决方案。
- 集合类:泛型在集合框架中被广泛使用,如
List<T>
、Dictionary<K, V>
等。 - 算法复用:编写通用的算法,不需要考虑数据类型的具体实现细节。
示例
- C# 泛型类
以下是如何创建一个泛型类并创建其实例的示例:
using System;
// 定义一个泛型类 Student
public class Student<T>
{
// 定义一个类型为 T 的变量
public T Data { get; set; }
// 定义 Student 类的构造函数
public Student(T data)
{
Data = data;
Console.WriteLine("Data passed: " + Data);
}
}
class Program
{
static void Main()
{
// 创建一个泛型类的实例,数据类型为 string
Student<string> studentName = new Student<string>("Avicii");
// 创建一个泛型类的实例,数据类型为 int
Student<int> studentId = new Student<int>(23);
}
}
输出
Data passed: Avicii
Data passed: 23
在这个例子中,我们定义了一个名为 Student
的泛型类,并创建了两个实例:studentName
和 studentId
。Student<T>
的类型参数 T
分别被替换为 string
和 int
类型。
- C# 泛型方法
类似于泛型类,我们也可以创建一个可以用于任何数据类型的方法。这种方法称为泛型方法。例如:
using System;
// 定义一个泛型类 Employee
class Employee<T>
{
// 定义一个泛型方法,显示传递的数据
public void DisplayData(T data)
{
Console.WriteLine("The data passed is: " + data);
}
}
class Program
{
static void Main()
{
// 创建一个泛型类的实例,数据类型为 string
Employee<string> employeeName = new Employee<string>();
// 调用 DisplayData() 泛型方法,并传递一个字符串值 "Jack"
employeeName.DisplayData("Jack");
// 创建一个泛型类的实例,数据类型为 int
Employee<int> employeeId = new Employee<int>();
// 调用 DisplayData() 泛型方法,并传递一个整数值
employeeId.DisplayData(123);
}
}
输出
The data passed is: Jack
The data passed is: 123
在这个例子中,我们在泛型类 Employee<T>
中定义了一个泛型方法 DisplayData()
,并用不同的数据类型调用了该方法。
- 带返回类型的泛型方法
我们还可以定义一个带有返回类型的泛型方法。例如:
using System;
// 定义一个泛型类 Movie
class Movie<T>
{
// 定义一个返回 T 类型值的泛型方法
public T DisplayData(T data)
{
return data;
}
}
class Program
{
static void Main()
{
// 创建一个泛型类的实例,数据类型为 string
Movie<string> movieName = new Movie<string>();
Console.WriteLine("Generics Method returns: " + movieName.DisplayData("Inception"));
// 创建一个泛型类的实例,数据类型为 int
Movie<int> movieRating = new Movie<int>();
Console.WriteLine("Generics Method returns: " + movieRating.DisplayData(9));
}
}
输出
Generics Method returns: Inception
Generics Method returns: 9
在这个例子中,我们定义了一个泛型方法 DisplayData()
,它的返回类型也是泛型类型 T
。方法可以返回任意类型的数据。
结语
泛型在 C# 中提供了一种强大的机制,可以实现代码的复用、提高类型安全性和灵活性。通过泛型,我们可以编写更通用、更易维护的代码。泛型不仅在自定义类和方法中非常有用,还被广泛应用于集合框架和其他系统组件中。