泛形声明
泛型有泛型类,泛型接口,泛型方法和泛型委托。
public class GenericClass<T>(){}
public interface GenericInterface<T>(){}
public void GenericMethod<T>(){}
public delegate GenericDelegate<T>(){}
泛型原理
在泛型的定义中,类型参数是一个占位符(placeholder),通常为一个大写字母,如T。在客户代码声明、实例化该类型的变量时,把T替换为客户代码所指定的数据类型。C#引入泛型就是把具体声明延迟,也就是说在编译时并不知道T是什么类型,在JIT运行的时候才把T替换为指定类型。
泛型优势
泛型会在运行时生成一个专用版本的栈,可以理解为一份数据副本,极大地降低了代码膨胀,提高泛型的速度,比装拆箱的速度要快很多。
泛型参数的约束
泛型使用关键字where来实现约束。约束就是保证泛型代码中要支持所需调用的操作或方法。例如:
public void Test<T>(T tParameter)
where T: classXXX
{
tParameter.Show();
}
在上面代码T必须是个类,而且这个类里要有Show()这个方法