委託的N種寫法

1、委託調用方式javascript

1. 最原始版本:

複製代碼
    delegate string PlusStringHandle(string x, string y);
    class Program
    {
        static void Main(string[] args)
        {
            PlusStringHandle pHandle = new PlusStringHandle(plusString);
            Console.WriteLine(pHandle("abc", "edf"));

            Console.Read();
        }

        static string plusString(string x, string y)
        {
            return x + y;
        }
    }
複製代碼

 2. 原始匿名函數版:去掉「plusString」方法,改成

            PlusStringHandle pHandle = new PlusStringHandle(delegate(string x, string y)
            {
                return x + y;
            });
            Console.WriteLine(pHandle("abc", "edf"));

3. 使用Lambda(C#3.0+),繼續去掉「plusString」方法(如下代碼均再也不須要該方法)

            PlusStringHandle pHandle = (string x, string y) =>
            {
                return x + y;
            };
            Console.WriteLine(pHandle("abc", "edf"));

還有更甚的寫法(省去參數類型)html

            PlusStringHandle pHandle = (x, y) =>
            {
                return x + y;
            };
            Console.WriteLine(pHandle("abc", "edf"));

若是隻有一個參數java

複製代碼
        delegate void WriteStringHandle(string str);
        static void Main(string[] args)
        {
            //若是隻有一個參數
            WriteStringHandle handle = p => Console.WriteLine(p);
            handle("lisi");

            Console.Read();
        }
複製代碼

 

2、委託聲明方式編程

1. 原始聲明方式見上述Demo

2. 直接使用.NET Framework定義好的泛型委託 Func 與 Action ,從而省卻每次都進行的委託聲明。

複製代碼
        static void Main(string[] args)
        {
            WritePrint<int>(p => Console.WriteLine("{0}是一個整數", p), 10);

            Console.Read();
        }

        static void WritePrint<T>(Action<T> action, T t)
        {
            Console.WriteLine("類型爲:{0},值爲:{1}", t.GetType(), t);
            action(t);
        }
複製代碼

3. 再加上個擴展方法,就能搞成所謂的「鏈式編程」啦。

複製代碼
    class Program
    {   
        static void Main(string[] args)
        {
            string str = "全部童鞋:".plusString(p => p = p + " girl: lisi、lili\r\n").plusString(p => p + "boy: wangwu") ;
            Console.WriteLine(str);

            Console.Read();
        }
    }

    static class Extentions
    {
        public static string plusString<TParam>(this TParam source, Func<TParam, string> func)
        {
            Console.WriteLine("字符串相加前原值爲:{0}。。。。。。", source);
            return func(source);
        }
    }
複製代碼

看這個代碼是否是和咱們平時寫的"list.Where(p => p.Age > 18)"很像呢?沒錯Where等方法就是使用相似的方式來實現的。函數

好了,我總結完了,若有遺漏,還望補上,臣不盡感激。post

 

出處:http://www.cnblogs.com/FreeDong/archive/2013/07/31/3227638.htmlthis

相關文章
相關標籤/搜索