原文:http://www.cnblogs.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);
}
}

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

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

(转)委托的N种写法,你喜欢哪种?的更多相关文章

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

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

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

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

  3. Android开发系列之button事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...

  4. KandQ:单例模式的七种写法及其相关问题解析

    设计模式中的单例模式可以有7种写法,这7种写法有各自的优点和缺点: 代码示例(java)及其分析如下: 一.懒汉式 public class Singleton { private static Si ...

  5. Python中斐波那契数列的四种写法

    在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,“你学过数据结构吗?”我略略点一点头 ...

  6. 17_点击事件第四种写法_布局文件添加onclick属性

    尽量不要用第四种点击事件的写法.在一万多行代码中发现了一个没被调用的代码 public void call(View v){//第四种写法参数一定是View v //public void call( ...

  7. ExtJs--09--javascript对象的方法的3种写法 prototype通过原型设置方法效率最好

    /** * javascript对象的方法的3种写法 推荐第三种 运行效率最好 */ function P(name , age){ this.name = name ; this.age = age ...

  8. 【JAVA8】Set排序四种写法

    工作中遇到,写了很久以前的写法,师兄给了很多建议,于是整理了一下.孔子曰:"你知道茴香豆的茴字有几种写法吗?" 第一种,平常的写法: public class App { publ ...

  9. controller 有两种写法,讨论一下两种写法的区别:

    controller 有两种写法,讨论一下两种写法的区别: 写法 1: app.controller('myCtrl', function($scope, $location) { $scope.my ...

  10. 【转载】javascript 杂谈之哪种写法你更喜欢?

    转载自:http://www.cnblogs.com/baochuan/archive/2012/04/30/2473771.html 思维导图  介绍   老是在写js,你平时是怎么写你的js呢?更 ...

随机推荐

  1. angularJS中XHR与promise

    angularJS应用是完全运行在客户端的应用,我们可以通过angularJS构建一个不需依赖于后端,同时能够实现动态内容和响应的web应用,angularJS提供了将应用与远程服务器的信息集成在一起 ...

  2. phalcon在phpstorm里的配置视频

    phalcon在phpstorm里的配置视频:http://www.tudou.com/programs/view/yXw6e_Rshwk/

  3. Python Django开始

    1.创建工程 C:\procedure\projects>django-admin startproject mysite 2.同步数据库 C:\procedure\projects\mysit ...

  4. UVA 11722 几何概型

    第六周A题 - 几何概型 Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descriptio ...

  5. A题

    A - A Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u   Descriptio ...

  6. maven3.0

    Maven入门教程 1.1. 介绍.环境配置 1.1.1. Maven介绍 Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model ...

  7. Oulipo

    poj3461:http://poj.org/problem?id=3461 题意:求一个串在另一个串中出现的次数. 题解:直接套用KMP即可,在统计的时候做一下修改.找到之后不是直接返回,而是移动i ...

  8. CLOUDSTACK HA功能,测试成功

    要注意VM HA和HOST HA两个级别的区别.并且要整合.

  9. Android Broadcaset 简介

    在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的Broadcast进行过滤接收并响应的一类组件.可以使用Broad ...

  10. sql(SqlServer)编程基本语法

    一.定义变量 --简单赋值 declare @a int set @a=5 print @a   --使用select语句赋值 declare @user1 nvarchar(50) select @ ...