委托的使用和语法定义
委托的使用是由四步来完成的,依次为:声明委托、创建委托对象、委托关联方法、调用
我们用一个例子来说明这四步如何操作,我们完成一个老板委托员工写报告的实例,看如何实现。
首先我们应该定义两个类,老板类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的存在,
消除了两者之间的耦合,是不是比传统的写法要好很多。
下篇文章我来介绍事件的使用
时间: 2024-10-08 02:50:20