白话说.net事件和委托
在学习C#中时候很早就听到过委托这个概念,我读了许多文章都没能理解它的含义,园子里好多是这么解释的:“委托相当与c++函数指针...”
本人没有学过C++,只模糊的记得在学C语言基础的时候,对指针的理解是这样的,指针是一个本身不存放值的变量,它里面存放的是另一个变量的内存地址。所以使我联想到了值类型变量和引用类型变量。
更是糊里糊涂的,在后来的工作学习中,渐渐的理解了它的含义。
问题:
1,委托到底是个什么东东。
2,什么时候能用到委托。
声明:这里,我们不去探讨委托的原理,内部机制等等...只是想把我对委托的理解,说出来...内容也仅供参考,欢迎改为前辈拍砖。
下面用白话和一个很白的例子说明问题。
定义一个类,里面有属性,方法,有的方法是通用的,我们可以实现它的代码。有的方法需要在具体的调用时才能确定它应该完成的功能,所以这里定义一个委托,具体的执行代码在调用时候再实现。这样就能根据实现代码的不同完成不同的操作。觉得是多态的一种表示形式。
还不明白,那看下面这个很“白”的例子:
我们的需求是这样的
某饭店 老板让 购物员去买菜,要买白菜和土豆,最后算出总价格
老板说:“白菜的价格如果大于3.5元,就扣除白菜的杂质,扣除方法是 每1公斤减掉0.3公斤的杂质再买”
购物员:“那土豆也是用这个规则么?”
老板说:“土豆按什么规则,扣不扣杂质你自己决定”
购物员暗想:“先去菜市场看看价格如果土豆的价格大于2.5元就扣杂质。。。”
这里姑且 买菜怎么买法有买方决定
下面实现我们的代码
//买菜类
public class BuyVegetable
{
double CabbageMoney;
double MurphyMoney;

因为只知道要买土豆,具体怎么买现在决定不了,所以只能 定一个 事件。
白话:怎么买得到到了菜市场才能决定,可是无论怎么样都得有买土豆这回事儿,无论到了菜市场怎么决定都离不开“价格”和“数量”这两个条件,这里就用到委托了,所以这个事件是委托类型的。 delegateBuyMurphy(委托的定义在下面)
/// 购买土豆事件
/// </summary>
public event delegateBuyMurphy eventBuyMurphy;
所以购买土豆的方法是这样的

计算总金额
/// 统计总体价格
/// </summary>
/// <returns></returns>
public double Stat()
{
return CabbageMoney + MurphyMoney;
}
}
购买土豆委托

使用上面的买菜类开始购买
protected void Page_Load(object sender, EventArgs e)
{
BuyVegetable buyVegetable = new BuyVegetable();
//购买白菜,老板制定的死规则不能改直接用这个规则吧。
//采购员问:土豆多少钱斤啊。
//售货员说:4.8。
//采购员说:等会,我先算算怎么买法
//购物员开始制定定买土豆的规则buyVegetable_eventBuyMurphy(代码在下面)
//制定完了,这个规则是买土豆这事儿的,当然得给买土豆这事儿
//购买土豆
//计算总价格
}
//购买土豆的规则方法buyVegetable_eventBuyMurphy

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述