明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
随笔 - 1277, 文章 - 0, 评论 - 214, 阅读 - 321万
  博客园  :: 首页  :: 管理
< 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

委托

Posted on   且行且思  阅读(246)  评论(0编辑  收藏  举报
 【词语】:委托
  【注音】:wěi tuō
  【释义】:1.亦作"委托"。 2.将自己的事务嘱托他人代为处理。 3.交结,结纳。 4.犹依托,依靠。
  (delegate)
  【定义】:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

C++

  一种引用类型,它是 C++ 函数指针的托管版本。委托可以引用实例和静态(在 Visual Basic 中为 Shared)方法,而函数指针只能引用静态(在 Visual Basic 中为 Shared)方法。
  在C#中,委托是一种可以把引用存储为函数的类型。
  委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。
  委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表。
  在定义了委托后,就可以声明该委托类型的变量。
  接着将这个变量初始化为与该委托有相同签名的函数引用。
  之后,就可以使用委托变量调用这个函数,就像 该变量是一个函数一样。

委托基本应用

  委托一般与事件配合起来一起使用,经典的用法:委托+事件=观察模式
  实现功能代码如下([1]):
  假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1、扬声器会开始发出语音,告诉你水的温度;2、液晶屏也会改变水温的显示,来提示水已经快烧开了。
  现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater(),一个发出语音警报的方法MakeAlert(),一个显示水温的方法,ShowMsg()。
  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace Delegate {
  // 热水器
  public class Heater {
  private int temperature;
  public delegate void BoilHandler(int param); //声明委托
  public event BoilHandler BoilEvent; //声明事件
  // 烧水
  public void BoilWater() {
  for (int i = 0; i <= 100; i++) {
  temperature = i;
  if (temperature > 95) {
  if (BoilEvent != null) { //如果有对象注册
  BoilEvent(temperature); //调用所有注册对象的方法
  }
  }
  }
  }
  }
  // 警报器
  public class Alarm {
  public void MakeAlert(int param) {
  Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
  }
  }
  // 显示器
  public class Display {
  public static void ShowMsg(int param) { //静态方法
  Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param);
  }
  }
  class Program {
  static void Main() {
  Heater heater = new Heater();
  Alarm alarm = new Alarm();
  heater.BoilEvent += alarm.MakeAlert; //注册方法
  heater.BoilEvent += (new Alarm()).MakeAlert; //给匿名对象注册方法
  heater.BoilEvent += Display.ShowMsg; //注册静态方法
  heater.BoilWater(); //烧水,会自动调用注册过对象的方法
  }
  }
  }
  输出为:
  Alarm:嘀嘀嘀,水已经 96 度了:
  Alarm:嘀嘀嘀,水已经 96 度了:
  Display:水快烧开了,当前温度:96度。
  // 省略...
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2007-07-22 多线程调度例子·····················
点击右上角即可分享
微信分享提示