C# 中的泛型可以提高代码的可重用性和类型安全,还可以替代大量重复性对值类型的装箱操作提高性能。
因为泛型体现了.Net中的多态特性,一般用来写通用方法,用以处理不同类型的相同操作,像我们平时使用比较多的List<T>、Dictionary<TKey,TValue>这些都是支持泛型的。(ArrayList不是泛型,内部是Object类型实现的,这点在使用时需要注意!做Java开发的小伙伴注意,Java中的泛型也是基于Object类型实现的。)
举一个例子:
/// <summary>
/// 一个泛型类
/// 运行时再确定具体类型
/// </summary>
/// <typeparam name="T"></typeparam>
class A<T>
{
public T t1;
public A(T t)
{
t1 = t;
}
/// <summary>
/// 一种通用方法
/// 针对不同的类型保持相同的处理逻辑
/// </summary>
public void WriteConsole()
{
Console.WriteLine($"类型:{typeof(T)},值为:{t1}");
}
}
class Program
{
static void Main(string[] args)
{
A<int> a = new A<int>(1);
a.WriteConsole();
Write(a.t1);
A<string> b = new A<string>("1-1");
b.WriteConsole();
Write(b.t1);
A<bool> c = new A<bool>(true);
c.WriteConsole();
Write(c.t1);
Console.Read();
}
/// <summary>
/// 一个泛型方法示例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
static void Write<T>(T t)
{
Console.WriteLine($"泛型方法输出-类型:{typeof(T)},值为:{t}");
}
}
输出结果: