首页 > 编程语言 >c# 委托和事件

c# 委托和事件

时间:2024-08-19 16:27:54浏览次数:4  
标签:publisher string 委托 c# 事件 msg public name

事件:事件是委托的安全包裹,让委托更加安全 是一种特色的变量类型

事件只能用+= -=来,而委托还可以用= 或者new来赋值

 

委托:以方法形式调用 ; 也可以+=,-=形式调用

 1   
 2   //以方法参数形式调用
 3 
 4   SayHello("小红", chinesehHello);
 5 
 6 
 7    //以+=, -=方式调用
 8 
 9     HelloDelegate helloDelegate = new HelloDelegate(chinesehHello);
10     helloDelegate += englishHello;
11     SayHello("wenyu", helloDelegate);
12 
13     helloDelegate -= englishHello;
14     SayHello("wenyu2", helloDelegate);
15 
16 
17 //==================
18 
19         public delegate void HelloDelegate(string name);
20 
21         public void SayHello(string name, HelloDelegate helloDelegate)
22         {
23             helloDelegate(name);
24         }
25 
26         public void englishHello(string name)
27         {
28             helloList.Add($"hello,{name}");
29             Console.WriteLine($"hello,{name}");
30         }
31         public void chinesehHello(string name)
32         {
33             helloList.Add($"你好,{name}");
34 
35             Console.WriteLine($"你好,{name}");
36         }

 

//事件:事件是委托的安全包裹,让委托更加安全 是一种特色的变量类型
//事件只能用+= -=来,而委托还可以用= 或者new来赋值

 1                 Publisher publisher = new Publisher();
 2                 Subscriber subscriber = new Subscriber();
 3 
 4                 //事件:事件是委托的安全包裹,让委托更加安全 是一种特色的变量类型
 5                 //事件只能用+= -=来,而委托还可以用= 或者new来赋值
 6 
 7                 publisher.addEvent += subscriber.addEmployee;
 8                 publisher.addEvent += subscriber.deleteEmployee;
 9                 //publisher.addEvent("");//不能直接使用 ×
10                 var result1 = publisher.executeEvent("我是event调用的"); //事件只能在声明的类里面调用
11 
12 
13 
14                 publisher.addDelegate += subscriber.addEmployee;
15                 publisher.addDelegate += subscriber.deleteEmployee;
16 
17                 //会调用add,delete方法,但是返回只返回最后一个方法的返回值
18                 var result2 = publisher.addDelegate("我是delegate调用的");
19 
20 
21 
22 //==========================
23 
24 
25     public delegate string MyDelegate(string msg);
26     public class Publisher
27     {
28         //事件作为成员变量存在于类中 ; 事件不能在类外面赋值+=  -=  ;事件不能在类外面出发调用
29         public event MyDelegate addEvent;
30         public MyDelegate addDelegate;
31         public string executeEvent(string msg)
32         {
33             //addEvent?.Invoke(msg);
34             return addEvent(msg);
35         }
36     }
37     public class Subscriber
38     {
39         public string addEmployee(string msg)
40         {
41             return $"addEmployee:{msg}";
42         }
43         public string deleteEmployee(string msg)
44         {
45             return $"deleteEmployee:{msg}";
46         }
47     }

 

标签:publisher,string,委托,c#,事件,msg,public,name
From: https://www.cnblogs.com/hanliping/p/18367568

相关文章

  • jsoncpp 介绍
    前言全局说明VisualStudio2013jsoncpp编译一、说明环境:Windows7旗舰版VisualStudio2013二、常用的JSON解析库有:(ChatGPT)nlohmann/json(一个现代C++JSON库)https://github.com/nlohmann/json/releasesJsonCpp(一个常见的JSON解析库)https://github.com......
  • 最强AI换脸软件FaceFusion一键包教程: 下一代脸部交换器和增强器。
    大家好,今天给大家介绍一款强大的换脸工具——FaceFusion。官方宣称的是:下一代脸部交换器和增强器。新版本在原有基础上增加了更多的模型和高清算法,显著提升了图片和视频的换脸效果。此外,还新增了三种遮罩功能,有效解决了脸部有物体遮挡时的融合效果差和跳闪问题。现在基础换脸......
  • c# process 输入、输出、捕获进程输出
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.Diagnostics;namespaceWindowsApplication1{publicpar......
  • C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机
    一个简单的有限状态机可以有如下内容1.状态基类(定义基本状态的方法,如进入(Enter)、执行(Execute)和退出(Exit),同时可以在此声明需要被管理的对象)2.具体状态类(定义具体状态,如:跳跃,行走,待机,每个具体状态类继承自状态基类)3.管理状态类(负责管理状态的切换逻辑,确保在不同状态之间进行......
  • Gradle编译项目Druid找不到tools.jar和jconsole.jar
     原因:jdk11之后不支持druid的两个依赖方法一:<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.5</version>方法二:<!--<exclusions><exclusion><gro......
  • RD-AML-Clean属性散射中心特征提取程序(可运行)
    %RD-AML-Clean属性散射中心特征提取程序%清空环境变量close;clc;clearAll;%Step1:频域数据的频率f和方位角ϕ的范围f_min=1e2;%频率范围起始点,单位Hzf_max=10e2;%频率范围终止点,单位Hznum_frequencies=150;%频率采样点数phi_min=0;%方位角......
  • Xfce漫游(2) - Xfce的启动流程
    本文探讨从Linux启动直到进入xfce4会话之前的过程;和Xfce相关的内容需要单独进行说明。从按下电源键到进入登录界面不关心这些,不过可以参考这篇Arch的启动流程或者bootup(7)。在这个过程中systemd启动时,还会启动各种服务诸如D-bus等,可以阅读systemd.service(5)。systemd启动的目......
  • VisualStudio 产生的.sdf和.ipch文件删除、不生成
    前言全局说明VisualStudio产生的.sdf和.ipch文件删除、不生成一、说明环境:Windows7旗舰版VisualStudio2013二、原因某天,打算给vs2013的一个工程,打包备份,打包后,发现压缩包有90MB,看到数字确实很惊讶。因为这个工程就是画了几个按钮的小功能,怎么会这么大。......
  • Docker 容器中镜像导出/导入
    利用容器中镜像导出/导入创建一个简单的Docker镜像利用dockerps-a命令查看要导出的镜像。导出查看要导出的镜像[root@localhost~]#dockerps-adockerexport命令进行镜像导出。[root@localhost~]#dockerexport418ae>nginx-docker.tar导入[vipsoft@kafka1ho......
  • docker 创建MySQL
    dockerrun\      --restart=always\  #这个参数是mysql在docker启动的时候,也会跟着自动启动--namemysql8.0\   #这个参数是mysql容器的名字-p3306:3306\    #这个参数是端口号映射-eMYSQL_ROOT_PASSWORD=root\  #这个参数是是设......