Lazy<T>

1、Fun<T>

        static Func<int> Add(int x, int y)
        {
            Console.WriteLine("调用 LazyAdd");
            return () =>
            {
                Console.WriteLine("执行 LazyAdd");
                return x + y;
            };
        }
View Code
            var lazyAdd = Add(1, 2);
            Console.WriteLine("显示 LazyAdd");
            Console.WriteLine(lazyAdd());
            Console.WriteLine(lazyAdd());
View Code

2、Lazy<T>

        static Lazy<int> LazyAdd(int x, int y)
        {
            Console.WriteLine("调用 LazyAdd");
            return new Lazy<int>(() =>
            {
                Console.WriteLine("执行 LazyAdd");
                return x + y;
            });
        }
View Code
            var lazyAdd = LazyAdd(1, 2);
            Console.WriteLine("显示 LazyAdd");
            Console.WriteLine(lazyAdd.Value);
            Console.WriteLine(lazyAdd.Value);
View Code

 和Fun<T>差别,少了第二次”执行LazyAdd“

3、Func<int>

        static int value = 10;
        static void Main(string[] args)
        {
            var lazyAdd = Add(1, 2);
            Console.WriteLine("显示 Add");
            Console.WriteLine(lazyAdd());
            value = 11;
            Console.WriteLine(lazyAdd());
            Console.Read();
        }

        static Func<int> Add(int x, int y)
        {
            Console.WriteLine("调用 Add");
            return () =>
            {
                Console.WriteLine("执行 Add");
                return x + y + value;
            };
        }
View Code

4、延迟加载缓存,不在执行第二次

        static int value = 10;
        static void Main(string[] args)
        {
            var lazyAdd = LazyAdd(1, 2);
            Console.WriteLine("显示 LazyAdd");
            Console.WriteLine(lazyAdd.Value);
            value = 11;
            Console.WriteLine(lazyAdd.Value);
            Console.Read();
        }

        static Lazy<int> LazyAdd(int x, int y)
        {
            Console.WriteLine("调用 LazyAdd");
            return new Lazy<int>(() =>
            {
                Console.WriteLine("执行 LazyAdd");
                return x + y + value;
            });
        }
View Code

 

 

为什么Func<int>第二次会执行内部函数,而Lazy<int>第二次不会执行内部函数

posted @ 2015-12-24 14:28  江境纣州  阅读(27)  评论(0编辑  收藏  举报