c# 使用委托返回执行结果

执行委托时,有时候需要委托的返回结果。我找了很多方法,觉得以下方法比较好一些。对委托进行封装,然后就可以带返回值了。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace DelegateReturnValue
{
    class Program
    {
        public static void Main()
        {
            GetResultValue<int> lazyOne = new GetResultValue<int>(() => ExpensiveOne());
            GetResultValue<long> lazyTwo = new GetResultValue<long>(() => ExpensiveTwo("apple"));


            Console.WriteLine("对象已创建.");

            Console.WriteLine(lazyOne.Value);
            Console.WriteLine(lazyTwo.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;
        }

        class GetResultValue<T> where T : struct
        {
            private Nullable<T> val;
            private Func<T> getValue;

            public GetResultValue(Func<T> func)
            {
                val = null;
                // 获取委托绑定
                getValue = func;
            }

            public T Value
            {
                get
                {
                    if (val == null)
                        val = getValue();
                    // 带回委托参数
                    return (T)val;
                }
            }
        }
    }
}


以下就是执行结果,第一个委托返回1。第二个委托返回字符串的长度。

 

展开阅读全文

没有更多推荐了,返回首页