一、委托调用方式

1. 最原始版本:

  1. delegate string PlusStringHandle(string x, string y);
  2. class Program
  3. {
  4. static void Main(string[] args)
  5. {
  6. PlusStringHandle pHandle = new PlusStringHandle(plusString);
  7. Console.WriteLine(pHandle("abc", "edf"));
  8.  
  9. Console.Read();
  10. }
  11.  
  12. static string plusString(string x, string y)
  13. {
  14. return x + y;
  15. }
  16. }

2. 原始匿名函数版:去掉“plusString”方法,改为

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

3. 使用Lambda(C#3.0+),继续去掉“plusString”方法(以下代码均不再需要该方法)

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

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

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

如果只有一个参数

  1. delegate void WriteStringHandle(string str);
  2. static void Main(string[] args)
  3. {
  4. //如果只有一个参数
  5. WriteStringHandle handle = p => Console.WriteLine(p);
  6. handle("lisi");
  7.  
  8. Console.Read();
  9. }

二、委托声明方式

1. 原始声明方式见上述Demo

2. 直接使用.NET Framework定义好的泛型委托 Func 与 Action ,从而省却每次都进行的委托声明。

  1. static void Main(string[] args)
  2. {
  3. WritePrint<int>(p => Console.WriteLine("{0}是一个整数", p), );
  4.  
  5. Console.Read();
  6. }
  7.  
  8. static void WritePrint<T>(Action<T> action, T t)
  9. {
  10. Console.WriteLine("类型为:{0},值为:{1}", t.GetType(), t);
  11. action(t);
  12. }

3. 再加上个扩展方法,就能搞成所谓的“链式编程”啦。

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. string str = "所有童鞋:".plusString(p => p = p + " girl: lisi、lili\r\n").plusString(p => p + "boy: wangwu") ;
  6. Console.WriteLine(str);
  7.  
  8. Console.Read();
  9. }
  10. }
  11.  
  12. static class Extentions
  13. {
  14. public static string plusString<TParam>(this TParam source, Func<TParam, string> func)
  15. {
  16. Console.WriteLine("字符串相加前原值为:{0}。。。。。。", source);
  17. return func(source);
  18. }
  19. }

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

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

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

委托的N种写法的更多相关文章

  1. 委托的N种写法,你喜欢哪种?

    一.委托调用方式 1. 最原始版本: delegate string PlusStringHandle(string x, string y); class Program { static void ...

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

    原文:http://www.cnblogs.com/FreeDong/archive/2013/07/31/3227638.html 一.委托调用方式 1. 最原始版本: delegate strin ...

  3. 【转】委托的N种写法,你喜欢哪种?

    一.委托调用方式 1. 最原始版本: delegate string PlusStringHandle(string x, string y); class Program { static void ...

  4. C# 委托的几种写法

    class Program    {         delegate string Get(string ss);        delegate string Get2(int i);       ...

  5. Android开发系列之按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  6. OWIN katana注册中间件的几种写法

    首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...

  7. Android按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  8. iOS中表视图单元格事件用nib和storyboard的两种写法总结

    从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁.但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理 ...

  9. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

随机推荐

  1. java中最常用jar包的用途

    jar包用途 axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法.jaxrpc.jar ...

  2. Java学习笔记50:JSONObject与JSONArray的使用(转)

    Java不像PHP解析和生产JSON总是一个比较痛苦的过程.但是使用JSONObject和JSONArray会让整个过程相对舒服一些. 需要依赖的包:commons-lang.jar commons- ...

  3. [nowcoder]青蛙

    链接:https://www.nowcoder.com/acm/contest/158/F 挺有意思的一道题,考场并查集忘记路径压缩就没AK== 很显然一个贪心是不,每只青蛙使劲往前跳,能跳多远跳多远 ...

  4. spark启动

    注意在启动spark时候要指定参数 要不就死启动的单机版的 /usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-shell \ --master spark: ...

  5. Google maps API

    https://developers.google.com/kml/documentation/kml_tuthttps://developers.google.com/maps/documentat ...

  6. 【bzoj5427】最长上升子序列(贪心+LIS)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5427 因为noip,博客咕了好久,这几天集中填一下坑. 这题我们可以假设往不确定的空位 ...

  7. tomcat配置访问图片路径映射到磁盘路径

    首先,我在调试页面的时候发现,图片路径为: /webapps/pic_son/img/1234565456.jpg 但是,tomcat中webapps的文件夹下的pic_son项目中,img文件夹是空 ...

  8. JavaWeb -- Struts2 构建视图:标签和结果, UI组件标签

    1. 示例 action 注入数据 和 处理action /** * OgnlAction */ public class UiAction extends ActionSupport { priva ...

  9. Windows下使用MinGW在命令行编译运行C++程序

    之前学习C语言的时候都是用IDE类似CodeBlocks的工具写完直接编译运行的,今天突然心血来潮,自己下一个编译器,在命令行下,编译运行C++程序,了解一下编译过程. 一.安装编译器 首先你需要下载 ...

  10. 【转】XGBoost 与 Boosted Tree

    XGBoost 与 Boosted Tree http://www.52cs.org/?p=429 作者:陈天奇,毕业于上海交通大学ACM班,现就读于华盛顿大学,从事大规模机器学习研究. 注解:tru ...