委托的N种写法,你喜欢哪种?
一、委托调用方式
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), ); 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种写法,你喜欢哪种?的更多相关文章
- Android开发系列之按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- Android按钮事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...
- Android开发系列之button事件的4种写法
经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...
- KandQ:单例模式的七种写法及其相关问题解析
设计模式中的单例模式可以有7种写法,这7种写法有各自的优点和缺点: 代码示例(java)及其分析如下: 一.懒汉式 public class Singleton { private static Si ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,“你学过数据结构吗?”我略略点一点头 ...
- 17_点击事件第四种写法_布局文件添加onclick属性
尽量不要用第四种点击事件的写法.在一万多行代码中发现了一个没被调用的代码 public void call(View v){//第四种写法参数一定是View v //public void call( ...
- ExtJs--09--javascript对象的方法的3种写法 prototype通过原型设置方法效率最好
/** * javascript对象的方法的3种写法 推荐第三种 运行效率最好 */ function P(name , age){ this.name = name ; this.age = age ...
- 【JAVA8】Set排序四种写法
工作中遇到,写了很久以前的写法,师兄给了很多建议,于是整理了一下.孔子曰:"你知道茴香豆的茴字有几种写法吗?" 第一种,平常的写法: public class App { publ ...
- controller 有两种写法,讨论一下两种写法的区别:
controller 有两种写法,讨论一下两种写法的区别: 写法 1: app.controller('myCtrl', function($scope, $location) { $scope.my ...
- 【转载】javascript 杂谈之哪种写法你更喜欢?
转载自:http://www.cnblogs.com/baochuan/archive/2012/04/30/2473771.html 思维导图 介绍 老是在写js,你平时是怎么写你的js呢?更 ...
随机推荐
- 前端学PHP之字符串函数
× 目录 [1]特点 [2]输出 [3]空格[4]大小写[5]HTML[6]格式化[7]比较 前面的话 字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的.信息的分类.解析.存储 ...
- 前端学PHP之函数
× 目录 [1]函数定义 [2]函数参数[3]返回值[4]变量函数[5]回调函数[6]递归函数[7]加载函数[8]匿名函数 前面的话 PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数 ...
- Hibernate学习之hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...
- .Net 转战 Android 4.4 日常笔记(3)--目录结构分析
看了创建项目后,出现的文件夹很多确实有点晕,不过经过简单的了解还是跟我们asp.net的目录有点相识滴. 下面这张图,概括了主要的文件用途.其实也只需要了解这几个就差不多了,知道在那里设计界面,那里写 ...
- Binary XML file line #2: Error inflating
06-27 14:29:27.600: E/AndroidRuntime(6936): FATAL EXCEPTION: main 06-27 14:29:27.600: E/AndroidRunti ...
- iOS开发之微信聊天页面实现
在上篇博客(iOS开发之微信聊天工具栏的封装)中对微信聊天页面下方的工具栏进行了封装,本篇博客中就使用之前封装的工具栏来进行聊天页面的编写.在聊天页面中主要用到了TableView的知识,还有如何在俩 ...
- CRL开发框架发布2.2版
CRL 2.3.0.0 CRL是一个面向对象的轻便型ORM业务框架 数据处理使用了对象/数据映射,采用Lambda表达式来表示条件查询,增加了可编程性和可靠性,出错机率低,同时也能用原生的SQL实现查 ...
- Golang类型转换
类型转换 1.int转string strconv.Itoa(i) 2.string转int i, err = strconv.Atoi(s) 或者 i, err = ParseInt(s, 10, ...
- spring控制并发数的工具类ConcurrencyThrottleSupport和ConcurrencyThrottleInterceptor
官方文档: /** * Support class for throttling concurrent access to a specific resource. * * <p>Desi ...
- Cookbook of QUnit
本篇文章是QUnit的简介,可以作为很好的入门教程.文章原址 介绍 自动化测试时软件开发过程中必不可少的一部分,而单元测试则是自动化测试的最为基本的一块,软件的每一个组件, 每一个功能单元都需要经过不 ...