C# 泛型介绍
在 C# 中,泛型(Generics)允许我们编写可以适用于多种数据类型的可复用代码,而不需要重复编写类或方法。泛型提供了类型参数化的能力,使得我们可以在编写代码时延迟确定具体的数据类型。
主要特点和优势:
-
代码复用和类型安全:
- 泛型允许我们编写一次代码,适用于多种数据类型,从而提高了代码的复用性和可维护性。
- 在编译时进行类型检查,避免了运行时类型转换错误,提供了更好的类型安全性。
-
性能优化:
- 泛型类和方法在运行时会被编译为特定的数据类型,因此不会引入装箱和拆箱的开销,从而提高了性能。
-
可读性和灵活性:
- 使用泛型使得代码更加清晰和简洁,因为可以在一个地方定义通用算法或数据结构。
- 可以通过指定不同的类型参数来适应各种业务需求,提高了代码的灵活性。
使用案例介绍两个泛型的应用场景:
1. 泛型集合类 List<T>
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// 创建一个整数类型的 List
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
// 创建一个字符串类型的 List
List<string> names = new List<string>();
names.Add("Alice");
names.Add("Bob");
names.Add("Charlie");
// 遍历并打印整数 List
Console.WriteLine("整数列表:");
foreach (int num in numbers)
{
Console.WriteLine(num);
}
// 遍历并打印字符串 List
Console.WriteLine("\n字符串列表:");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
2. 泛型方法示例
using System;
class Program
{
static void Main(string[] args)
{
// 调用泛型方法 Swap
int a = 1, b = 2;
Console.WriteLine($"交换前:a = {a}, b = {b}");
Swap(ref a, ref b);
Console.WriteLine($"交换后:a = {a}, b = {b}");
// 调用泛型方法 Max
int maxInt = Max(5, 3);
Console.WriteLine($"最大值是:{maxInt}");
}
// 泛型方法:交换两个变量的值
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
// 泛型方法:返回两个值中较大的一个
static T Max<T>(T x, T y) where T : IComparable<T>
{
return x.CompareTo(y) > 0 ? x : y;
}
}