博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
委托的N种写法
阅读量:5966 次
发布时间:2019-06-19

本文共 2419 字,大约阅读时间需要 8 分钟。

一、委托调用方式

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
(p => Console.WriteLine("{0}是一个整数", p), 10); Console.Read(); } static void WritePrint
(Action
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
(this TParam source, Func
func) { Console.WriteLine("字符串相加前原值为:{0}。。。。。。", source); return func(source); } }

看这个代码是不是和我们平时写的"list.Where(p => p.Age > 18)"很像呢?没错Where等方法就是使用类似的方式来实现的。

好了,我总结完了,如有遗漏,还望补上,臣不尽感激。

 

出处:http://www.cnblogs.com/FreeDong/archive/2013/07/31/3227638.html

你可能感兴趣的文章
DEDECMS最新5.7版在Windows下的Memcache安装
查看>>
nginx Win下实现简单的负载均衡(2)站点共享Session
查看>>
[sql]sqlite3板子上安装运行报错
查看>>
【Java基础】Java基本数据类型与位运算
查看>>
heidiSQL使用简介
查看>>
kgtemp文件转mp3工具
查看>>
[代码笔记]VUE路由根据返回状态判断添加响应拦截器
查看>>
Git远程操作详解【转】
查看>>
Mac关闭摄像头
查看>>
015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile tempname
查看>>
条件过滤
查看>>
【WPF】屏幕右下角消息提示框
查看>>
OpenCV + python 实现人脸检测(基于照片和视频进行检测)
查看>>
Android环境下通过C框架层控制WIFI【转】
查看>>
不再任人欺负!手游安全的进阶之路
查看>>
卷积转换为矩阵运算中填充数的计算-GEMM
查看>>
WPF Calendar 日历控件 样式自定义
查看>>
vue-自定义组件传值
查看>>
十个 Laravel 5 程序优化技巧
查看>>
R12.1.3 & R12.2.X 注册客户化应用
查看>>