1.定义
允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。
2.泛型方法
// 泛型方法
void GenericFun<T>(T t)
{
Console.WriteLine(t.GetType());
}
GenericFun(123);
GenericFun("hello");
GenericFun(new People("ming", 18));
结果:
System.Int32
System.String
Program+People
3.泛型类
/// <summary>
/// 泛型类
/// </summary>
/// <typeparam name="T"></typeparam>
public class GenericClass<T>
{
public T _T;
}
// T是int类型
GenericClass<int> genericInt = new GenericClass<int>();
genericInt._T = 123;
// T是string类型
GenericClass<string> genericString = new GenericClass<string>();
genericString._T = "123";
4.泛型接口
/// <summary>
/// 泛型接口
/// </summary>
public interface IGenericInterface<T>
{
//泛型类型的返回值
T GetT(T t);
}
5.泛型委托
public delegate void SayHi<T>(T t);//泛型委托
6.泛型约束
约束 | s说明 |
---|---|
T:结构 | 类型参数必须是值类型 |
T:类 | 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。 |
T:new() | 类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 |
T:<基类名> | 类型参数必须是指定的基类或派生自指定的基类。 |
T:<接口名称> | 类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。 |