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

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

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

  • 相关阅读:
    算法学习算法复杂度
    算法学习冒泡排序和快速排序
    焦点管理
    数据结构学习链表、双向链表、循环链表
    数据结构学习数组、栈和队列
    数据结构学习集合
    数据结构学习字典和散列表
    (转)一个webservice的小demo
    堆栈详解
    JS实现大小写转换
  • 原文地址:https://www.cnblogs.com/oneheart/p/4123614.html
Copyright © 2020-2023  润新知