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

LazyValue<T>

时间:2018-08-14 21:02:38      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:测试   扩展   div   private   HERE   OLE   create   定义   arp   

public void ExtendFuncT()
        {
            //():匿名无参方法。() =>方法名,指派匿名无参方法去执行另外一个方法。
            LazyValue<int> lazyOne = new LazyValue<int>(() => ExpensiveOne());//匿名无参方法被指派去执行ExpensiveOne
            LazyValue<long> lazyTwo = new LazyValue<long>(() => ExpensiveTwo("apple"));//匿名无参方法被指派去执行ExpensiveTwo

            Console.WriteLine("LazyValue objects have been created.");

            //泛型类别根据 关联的委托与方法 取值。
            Console.WriteLine(lazyOne.Value);//跳转到() => ExpensiveOne(),执行LazyValue<T>.Value的取值,然后显示结果。
            Console.WriteLine(lazyTwo.Value);//跳转到() => ExpensiveTwo("apple"),执行LazyValue<T>.Value的取值,然后显示结果。
        }
        //无参测试方法
        static int ExpensiveOne()
        {
            Console.WriteLine("\nExpensiveOne() is executing.");
            return 1;
        }
        //计算字串长度
        static long ExpensiveTwo(string input)
        {
            Console.WriteLine("\nExpensiveTwo() is executing.");
            return (long)input.Length;
        }
    }
    //扩展:自定义泛型类别LazyValue T,以Funct<T>为参数类型传递。
    class LazyValue<T> where T : struct
    {
        private T? val;//或 Nullable<T> val; //标记返回类型T,同时用于保存Func<T>委托的方法的返回值
        private Func<T> getValue;           //返回类型为T的委托

        // 构造。参数Funct<T>类型:传入的参数为返回类型为TResult(任何类型)的无参方法。
        public LazyValue(Func<T> func)
        {
            val = null;
            getValue = func;
        }

        public T Value
        {
            get
            {
                if (val == null)
                    val = getValue();//取得委托方法的返回值。
                return (T)val;      //强制抓换委托方法返回值类型。
            }
        }
    }

  

LazyValue<T>

标签:测试   扩展   div   private   HERE   OLE   create   定义   arp   

原文地址:https://www.cnblogs.com/liuqiyun/p/9477491.html

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