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

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

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

posted on   One heart  阅读(598)  评论(2编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示