首页 > 代码库 > C#基础学习之委托的理解和应用

C#基础学习之委托的理解和应用

委托的使用和语法定义

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

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

首先我们应该定义两个类,老板类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的存在,

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

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

C#基础学习之委托的理解和应用