码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2014-11-26 18:19:38      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   使用   sp   for   on   div   

委托的使用和语法定义

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

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

首先我们应该定义两个类,老板类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#基础学习之委托的理解和应用

标签:style   blog   color   os   使用   sp   for   on   div   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!