c#中,委托Func的简单实践
c# 委托Func的简单实践
最近才真正的接触委托,所以针对Func类型的委托,做一个实践练习。
首先说一些我对委托的初级理解:“就是把方法当做参数,传进委托方法里”。
我平时用到的有三种:
1、把方法A()传进委托,委托中直接执行方法A()。
2、把方法A(int index)传进委托,委托中创建A中的参数index,然后执行方法A(index)。
3、把方法A(int index)与index值,都传进委托,委托中直接执行方法A(index)。
Func在我的理解中是一个必须有返回值的,可以使用范型的 委托。
我可以把Func比喻成一个面包房,与上面三种方法对应的例子就是:
1、我把做面包的方法,告诉给面包房,面包房可以自动生产一个面包出来。
2、我把做面包的方法(此方法需要人工实现),告诉给面包房,面包房找一个员工,根据方法,做出来一个面包。
3、我租借面包房的地方,我自己待着做面包的方法(此方法需要人工),自己通过方法,做出来一个面包。
以下为代码实现过程。
首先建立两个实体 客人(Customer) 与 员工(Employee)
Customer:
- /// <summary>
- /// 客人
- /// </summary>
- public class Customer
- {
- public string Name { get; set; }
- }
Employee:
- /// <summary>
- /// 员工
- /// </summary>
- public class Employee
- {
- public string Name { get; set; }
- }
然后 建立面包实体(BreadInfo)
- /// <summary>
- /// 面包
- /// </summary>
- public class BreadInfo
- {
- /// <summary>
- /// 名称
- /// </summary>
- public string Name { get; set; }
- }
建立一个面包房类(Bakery)
- /// <summary>
- /// 面包房
- /// </summary>
- public class Bakery
- {
- /// <summary>
- /// 做食物
- /// </summary>
- /// <typeparam name="T">范型(食物类型)</typeparam>
- /// <param name="func"></param>
- /// <returns></returns>
- public static T MakeFood<T>(Func<T> func)
- {
- //直接执行方法
- return func();
- }
- /// <summary>
- /// 通过面包房员工 做食物
- /// </summary>
- /// <typeparam name="T">范型(食物类型)</typeparam>
- /// <param name="func"></param>
- /// <returns></returns>
- public static T MakeFoodByEmployee<T>(Func<Employee, T> func)
- {
- //找一个面包房员工
- Employee e = new Employee();
- //将参数e(面包房员工)传进方法中
- return func(e);
- }
- /// <summary>
- /// 租借面包房 做食物
- /// </summary>
- /// <typeparam name="T">范型(食物类型)</typeparam>
- /// <param name="func"></param>
- /// <param name="c"></param>
- /// <returns></returns>
- public static T BorrowMakeFood<T>(Func<Customer, T> func, Customer c)
- {
- //将参数c(客户)传进方法中
- return func(c);
- }
- }
建立一个方法类(Function) 方法中有做面包的三种方式
- /// <summary>
- /// 做面包方法类
- /// </summary>
- public class Function
- {
- /// <summary>
- /// 直接做面包
- /// </summary>
- /// <returns></returns>
- public static BreadInfo MakeBread()
- {
- return new BreadInfo();
- }
- /// <summary>
- /// 用过客户自己 做面包
- /// </summary>
- /// <param name="c">客户自己</param>
- /// <returns></returns>
- public static BreadInfo MakeBreadByCustomer(Customer c)
- {
- return new BreadInfo();
- }
- /// <summary>
- /// 用过面包房员工 做面包
- /// </summary>
- /// <param name="e">面包房员工</param>
- /// <returns></returns>
- public static BreadInfo MakeBreadByEmployee(Employee e)
- {
- return new BreadInfo();
- }
- }
完毕以后 就可以调用了。
- //直接让面包房自动 做面包
- var f = Bakery.MakeFood(Function.MakeBread);
- //通过面包房员工 做面包(员工是面包房自动提供的 不用传进去)
- var f1 = Bakery.MakeFoodByEmployee(Function.MakeBreadByEmployee);
- //客户自己租借面包房地点 做面包(客户自己需要传进去)
- Customer c = new Customer();
- var f2 = Bakery.BorrowMakeFood<BreadInfo>(Function.MakeBreadByCustomer, c);
一个简单Func类型委托实现完毕,有很多不足,希望各位大大能够指正
c#中,委托Func的简单实践的更多相关文章
- 2.C#中通过委托Func消除重复代码
阅读目录 一:重复的代码 二:C#中通过委托Func消除重复代码 一:重复代码 public class Persion { public string Name { get; set; } ...
- C#中委托的理解
请注意,这只是个人关于C#中委托的一点点理解,参考了一些博客,如有不周之处,请指出,谢谢! 委托是一种函数指针,委托是方法的抽象,方法是委托的实例.委托是C#语言的一道坎,明白了委托才能算是C#真正入 ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- C#中委托、匿名函数、Lambda表达式的一些个人理解
0x01定义一个委托,相当于定义一个可以存储方法的特殊变量类型 下面我们看具体的代码,通过代码更好理解 delegate void IntMethodInvoker(int x); 这行代码就是声明一 ...
- Thrift简单实践
0.什么是RPC RPC(Remote Procedure Call - 远程过程调用),是通过网络从远程计算机上请求服务,而不需要了解底层网路技术的细节.简单点说,就是像调用本地服务(方法)一样调用 ...
- Deferred在jQuery和Angular中的使用与简单实现
Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...
- Java 异步处理简单实践
Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
- Android 设计随便说说之简单实践(合理组合)
上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...
- C#中委托和事件
目 录 将方法作为方法的参数 将方法绑定到委托 更好的封装性 限制类型能力 范例说明 Observer 设计模式简介 实现范例的Observer 设计模式 .NET 框架中的委托与事件 为什么委托定义 ...
随机推荐
- HTML5学习+javascript学习:打飞机游戏Service层Control层+源码
2.Service层 如前所述,Service层是Control层与Model层之间桥接的一层,它拥有所有要在屏幕上显示的实体(除了背景)的引用 我们知道,当游戏运行时,随时都可能发生碰撞,随时都可能 ...
- [Ext JS 4] contentEL,renderTo, applyTo 释义与区别
前言 若干年前,使用Ext JS 3 开发了一个系统. 随着Ext JS 4的出现,总是会看到或听到关于Ext 比较多的言论是 : Ext JS 4 较Ext JS 3 有较大的改变. Ext JS ...
- U盘读不出+卷标丢失+像读卡器+大小0+无媒体
U盘读不出+卷标丢失+像读卡器+大小0+无媒体 标题有点怪,原因是我不都不知道该怎样概括这个鸟问题,所以尽可能列出一些主要现象,希望有需要的童鞋搜到.但比标题更怪的是问题本身,且听我道来: 陪伴我若干 ...
- service structure flowchart with full stack functionality in a brife map
More functionality will be added and running This diagram is just an easy chart for people to digest
- Codeforces Round #193 (Div. 2)
题目地址: http://codeforces.com/contest/332 第一题:题目又臭又长,读了好长时间才读懂. n个人,你是0号,从0开始到n-1循环做动作,只要你前面三个人动作一样,你就 ...
- mini2440裸机之I2C
// File Name : IIC.c // Function : S3C2440 IIC-bus Master Tx/Rx mode Test Program // (I ...
- [置顶] 让我爱恨的ThinkPHP Relation
还记得第一次用ThinkPHP的relation,做了一个关联查询,觉得特别好用.有那么一天尝试着用关联插入,怎么插,都插不进,我插,我擦! 后来在龙哥的指点下算是成功的实践了一次,后来怎么用都不顺, ...
- 添加第三方类库造成的Undefined symbols for architecture i386:编译错误
1.原因: 如果是源码编译的话,一般就只某些头文件没有添加到src编译里面.但是对于添加库编译,一般是库的编译路径设置不正确(比如arm的版本.模拟器或者真机的不同版本库引用错误或者重复引用一起编译器 ...
- Windows平台下安装Eclipse插件,开发Hadoop应用
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- OC之类与对象
1.面向过程与面向对象. 1). 完成需求1 将大象放进冰箱. a. 把冰箱门打开. b. 把大象放进去. c. 把冰箱门关上. 这是面向过程的思路. 找1个冰箱,要求这个冰箱可以自己开门,自己把大象 ...