首页 > 其他 > 详细

LazyValue<T>

时间:2018-08-14 20:44:47      阅读:158      评论:0      收藏:0      [点我收藏+]
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>

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!