码迷,mamicode.com
首页 > 其他好文 > 详细

泛型缓存原理

时间:2020-05-26 18:02:19      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:编译器   dao   color   com   class   需求   ret   副本   产生   

泛型方法的根本目的就是一个方法代替多个方法,满足不同类型的需求
例如,差不多的方法体需要传入不同参数
 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

泛型缓存原理

标签:编译器   dao   color   com   class   需求   ret   副本   产生   

原文地址:https://www.cnblogs.com/cg-ww/p/12760544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!