泛型方法的根本目的就是一个方法代替多个方法,满足不同类型的需求
例如,差不多的方法体需要传入不同参数
public class GenericMenthod { public static void GetName(string name) { Console.WriteLine("" + name); } public static void Getid(int id) { Console.WriteLine("" + id); } public static void Get(object Datetime) { Console.WriteLine("" + Datetime); } }
有人说为什么不用object来代替呢
当然可以,但是object是引用类型,当传入值类型的参数,会执行装箱拆箱操作,损耗系统性能,没有约束程序不严谨。
public static void Get<T>(T t) { Console.WriteLine("" + t); }
延迟加载,在调用时才指定类型
Console.WriteLine(typeof(List<>));
泛型.NET Framework2.0 编译器升级-支持占位符 JIT升级-运行时将占位符替换
第一次编译会带占位符,第二次编译会把占位符替换成真实类型
JIT会为不同的类型产生不同的副本
public class Generic<T> { private static string GenericCache = null; static Generic() { GenericCache = $"{typeof(T).FullName}"; } public static string GetData() { return GenericCache; } } static void Main(string[] args) { for (int i = 0; i < 5; i++) { Console.WriteLine("**********************"); Generic<int>.GetData(); Generic<string>.GetData(); Generic<DateTime>.GetData(); Generic<object>.GetData(); } Console.ReadLine(); }
在循环第一次时,已经为每种类型生成了副本,当第二次循环时,直接使用之前的对象,返回GenericCache