C#高级开发之泛型一
1、泛型
C#中的泛型引入了延迟申明(延迟申明思想),把参数类型的申明推迟到调用,在编译(第一次编译)时先生成中间代码IL公共中间语言(CIL),通用类型T只是一个占位符。在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地托管代码(.net框架编译器编写的代码,需要在CLR的环境下运行),这个本地托管代码中已经使用了实际的数据类型,等同于用实际类型写的类,然后在CLR(公共语言运行库)中再次有JIT即时编译器转换机器代码(二进制)。泛型不是语法堂,而是由.net2.0框架升级而来需要编译器支持+JIT支持等支持。
占位符(`)2为参数个数
一 泛型方法、泛型类、泛型接口、泛型委托
1、泛型方法: 泛型方法解决用一个方法,满足不同参数类型;做相同事,没有写死参数类型,调用的时候才指定类型,泛型方法声明示例,以下是一个参数的方法声明
public static void Show<T,S>(T tParameter) { Console.WriteLine("This is {0},parameter={1},type={2}", typeof(GenericMethod), tParameter.GetType().Name, tParameter.ToString()); }
2、泛型类:一个类来满足不同的具体类型,做相同事。泛型类声明示例,
public class GenericClass<T> { public T _T;//泛型类中声明一个类型 }
3、泛型接口:一个接口来满足不同的具体类型做相同事,泛型接口声明示例,
public interface IGenericInterface<T> //where T : People { T GetT(T t);//泛型类型的返回值(接口中的泛型方法) }
4、泛型委托,一个委托满足不同的具体类型做相同事,泛型委托声明示例,
public delegate void SayHi<T>(T t);//泛型委托
二,泛型约束 泛型基类约束(不能是sealed),泛型接口约束,泛型引用类型约束,值类型约束,无参数构造约束。泛型约束权力与义务:可以使用基类的一切属性方法(权利) 强制保证T一定是People或者People的子类(义务)示例如下
1 public static T Get<T>(T t) 2 where T:People//基类约束 3 //where T : ISports//接口约束 4 //where T : class//引用类型约束 5 //where T : struct//值类型约束 6 //where T : new()//无参数构造函数约束 7 { 8 t.Hi(); 9 //t.Pingpang(); 10 //T tNew = null; 11 //T tNew = default(T);//会根据T的不同 赋予默认值 12 return t; 13 }