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的存在,

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

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

原文地址:https://www.cnblogs.com/oneheart/p/4123614.html