zoukankan      html  css  js  c++  java
  • LazyValue<T>

    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("
    ExpensiveOne() is executing.");
                return 1;
            }
            //计算字串长度
            static long ExpensiveTwo(string input)
            {
                Console.WriteLine("
    ExpensiveTwo() 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;      //强制抓换委托方法返回值类型。
                }
            }
        }
    

      

  • 相关阅读:
    软件工程实践总结
    2020软件工程第五次作业05
    软件工程问题清单
    2020软件工程第四次作业04
    用SQL*Plus命令启动和关闭数据库
    2020软件工程第三次作业03
    2020软件工程作业02
    图像处理问题清单
    2020软件工程作业01
    Markdown 快速入门
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/9477491.html
Copyright © 2011-2022 走看看