首页 > 学院 > 开发设计 > 正文

(转)委托的N种写法,你喜欢哪种?

2019-11-17 03:25:25
字体:
来源:转载
供稿:网友

(转)委托的N种写法,你喜欢哪种?

原文:http://www.VEVb.com/FreeDong/archive/2013/07/31/3227638.html

一、委托调用方式

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"));

还有更甚的写法(省去参数类型)

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

如果只有一个参数

复制代码
        delegate void WriteStringHandle(string str);        static void Main(string[] args)        {            //如果只有一个参数            WriteStringHandle handle = p => Console.WriteLine(p);            handle("lisi");            Console.Read();        }
复制代码

二、委托声明方式

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);        }    }
复制代码
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表