委托的使用和语法定义

委托的使用是由四步来完成的,依次为:声明委托、创建委托对象、委托关联方法、调用

我们用一个例子来说明这四步如何操作,我们完成一个老板委托员工写报告的实例,看如何实现。

首先我们应该定义两个类,老板类Boss和员工类Employee,老板委托员工写报告,其实是老板什么都没做,而是告诉员工去做事情(写报告),

那我们的定义如下

public class Boss
{
//声明委托
public delegate void DoWorkEventHandler(string content);
//创建委托对象
public DoWorkEventHandler WorkEventHandler;
//做事情
public void DoWork(string content)
{
if (WorkEventHandler != null)
{
WorkEventHandler.Invoke(content);
//或者如下调用
//handler(content);
}
}
}
委托的声明和创建都是在Boss里定义的,DoWork内部只是对委托进行了调用,但目前看不出来到底做了什么事情。
再看员工类的实现    
public class Employee
{
public void DoWork(string content)
{
Console.WriteLine(string.Format("老板委托我{0}", content));
}
}
员工类里定义了DoWork方法,实现具体做什么事情
那接下来我们就来看Boss是如何委托给Employee做事情的    
public class DelegateExecutor
{
public static void Run()
{
Boss boss = new Boss();
string content = "写报告";
//委托注册关联方法
boss.WorkEventHandler = new Boss.DoWorkEventHandler(new Employee().DoWork);
//
boss.DoWork(content);
}
}
其实在调用boss.DoWork的时候,内部是委托调用了Employee.DoWork方法。好了,这样我们最终完成老板委托员工写报告的功能。 

委托的优点

如果我们按照一般的写法实现以上功能的话,我们可能这样写

public class Boss
{
public void DoWork(string content)
{
Employee employee = new Employee();
employee.DoWork(content);
}
}

我们看这样有个显著的问题就是Boss和Employee类产生了直接依赖,耦合在了一起,然而使用委托实现的例子中,Boss完全不知道Employee的存在,

消除了两者之间的耦合,是不是比传统的写法要好很多。

下篇文章我来介绍事件的使用

最新文章

  1. swiper的初步使用
  2. dev checkbox多选
  3. ubuntu 安装配置jdk+eclipse+android sdk
  4. fzu2188 状压dp
  5. static, readonly, const
  6. Umbraco列表分页
  7. 解决A program file was not specified in the launch configuration.问题
  8. 解决ScrollView 与ListView共存显示不完全的问题
  9. BestCoder Round #36 (hdu5200)Strange Class(离线)
  10. 02-IOSCore - NSFileHandle、合并文件、文件指针、文件查看器
  11. POJ 3233 Matrix Power Series(矩阵高速功率+二分法)
  12. 详解EBS接口开发之库存事务处理批次更新
  13. 存在重复元素 II
  14. oracle 分析函数 keep(dense_rank first/last)
  15. todo: 改变字体的动画
  16. lua --- Module
  17. linux执行系统命令时挂起
  18. 所做更改会影响共用模板Normal.dotm。是否保存此更改
  19. [转]Redis几个认识误区
  20. java concurrency

热门文章

  1. 高并发第六弹:线程封闭(ThreadLocal)
  2. 海量数据中找出前k大数(topk问题)
  3. python之线程queue
  4. JVM类加载器及Java类的生命周期
  5. Linux学习3-Linux系统安装CentOS6.5
  6. LeetCode CombinationSum
  7. p2p登录拦截
  8. Ubuntu加入opencv库的环境变量
  9. Dlink DIR-823G 漏洞挖掘过程
  10. centos安装redis,并设置开机自动启动项