c# 创建委托 消息订阅_C#面向对象之委托和事件

委托

1.定义:委托也叫代理,就是把事情交给别人来做。

2.声明委托语法: delegate 返回类型 委托名称();

委托使用步骤

1.声明委托

public delegate int CalculatorDelegate(int a,int b);

2.根据委托类型创建方法

3.创建委托对象并指定方法

CalculatorDelegate objCal = new CalculatorDelegate(add);//创建委托对象objCal并指定加方法

4.通过委托去调用方法

int result = objCal(10,20);//通过委托调用加方法

委托断开及关联方法

断开: 委托对象 -= 方法 例如:objCal -= add;

关联:委托对象 +=方法 例如: objCal += add;

事件

1.定义:事件是C#中的一个高级概念,是操作发生时允许执行特定应用程序的代码机制。

事件要么在相关联操作发生之前(事前事件),要么在操作发生后发生(事后事件)。例如,当用户单机窗口中的按钮时,将引发一个事后事件,以允许执行特定的应用程序方法。类或对象可以通过事件向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。

在典型的C#Windows窗体或Web应用程序中,可以订阅由控件(如按钮或列表框)引发的事件。如考场上老实说“开始考试”,学生就开始答卷,其中老师说的“开始考试”是事件,“学生开始答卷”是这个事件引发的动作。老师是事件的发行者,学生是事件的订户。

在C#中定义和使用事件一般有以下几个步骤。

1.在一个类中声明一个关于事件的委托。

public delegate void 事件类型名称(object sender, EventArgs e);

事件类型名称建议用EventHandler结尾,如果想自定义事件的参数EventArgs,可以用EventArgs类派生自己写的事件参数类,也可以没有参数。

2.在类中声明事件,使用步骤1的delegate作为事件的类型。

public event 事件类型名称 事件名称;

3.在类中需要引发事件的方法中,编写引发事件的方法。

事件名称(this,new EventArgs());

或者

if(事件名称 != null) 事件名称(this, new EventArgs());

4.订阅事件,当事件发生时通知订户

带有事件的类实例.事件名称 += new 事件名称(事件处理方法名称);

5.编写事件处理方法

public void 事件处理方法名称 (object sender, EventArgs e)

{

//添加你的代码

}

6.在适当的条件下触发事件,即需要调用步骤3中的引发事件方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 集群 lvs,linux集群--LVS集群

拓扑图:1、LVS配置脚本:需要安装:ipvsadm-1.24-10.i386.rpmvi /etc/rc.d/init.d/lvsdr#!/bin/bashvip192.168.0.116web1192.168.0.104web2192.168.0.114./etc/rc.d/init.d/functionscase "$1" instart)echo "startlvs-dr&quo…

服务器连接工具mat_将个人笔记本改造成Linux简易服务器

实验过程1、开启Ubuntu系统的ssh服务开启之后其他电脑就可以通过ssh登录Ubuntu服务器,通过安装openssh-server就可以达到目的。(1)查看主机有没有ssh服务在Ubuntu系统桌面右击后点击“打开终端”,输入一下命令:ssh localhost若出现&#xff1…

c语言存储结构的实现,(C语言)栈的链式存储结构的实现

#includetypedef struct Stack_Linklist{int data;struct Stack_Linklist *next;}Node,*pNode;typedef struct Stack{pNode pTop;pNode pBottom;}Stack,*pStack;void Initstack();//初始化;int Isempty();//判断栈是否为空void Push();//压栈int Pop();//出栈int Ge…

以下对c语言函数的描述中正确的是,以下对C语言函数的有关描述中,正确的是

摘要:它决习定于的学后天,下语密切关系的能与社力是会文化有。关描透性的是起渗利尿可引。认的r默链接路径是(,述中在建点时立站。...它决习定于的学后天,下语密切关系的能与社力是会文化有。函数人感型的偏好感受觉很丰富。关描透…

创建前缀一样的文件_SpringBoot:配置文件属性读取

SpringBoot中默认加载的是application.properties或者application.yaml文件,当然也支持自定义的属性文件。我们可以在此文件中写一些自己想要的配置信息,然后在用的地方读取。默认属性文件在application.properties文件中添加配置信息,如下&a…

c语言降序多项式加法,数据结构算法(多项式加法)的C语言完美实现

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*数据结构多项式加法用C语言的完美实现,书43页 算法 2.23[ 数据结构(C语言版) 严尉敏主编]*//*注释就不加了,本程序的所有函数书上都有说明*//*本程序Tourboc 2.0编译通过*/#include #include #include #in…

c语言 算术平均滤波法_单片机数字滤波的算法

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。在单片机进行数据采集时,会遇…

非顺序控制结构的c语言语法是怎样的,流程控制语句:顺序结构和选择结构

流程控制语句概述:控制程序的执行流程分类:顺序结构选择结构循环结构顺序结构语句顺序结构语句:从上往下,依次执行选择结构if语句:switch语句:if语句:格式1:格式2:格式3:if语句的格式:if(比较表达式){语句体;}执行流程:先计算比较表达式的值,看其返回值是true还是fa…

python3 asyncio 爬虫_python3 asyncio异步新浪微博爬虫WeiboSpider

一些废话之前写的用python3urllib写的多线程微博(传送门),后面发现登录账号频繁被403,所以解决登录问题迫在眉睫。而且python的“多线程”并不那么多线程,最近因为刚需,需要稳定的微博爬虫,所以琢磨了一下使用selenium…

linux .forward,linux forward的实现

对于linux的数据包流向,大家应该是比较了解,如果还不是很了解,可以参考《OReilly.Understanding.Linux.Network.Internals.Dec.2005》,其中有一个图非常清楚的描述了数据包的流向。ip的数据包接收函数是ip_rcv()>ip_rcv_finish…

参数 携带 跳转_微信小程序:页面跳转及参数传递

本文首发自个人自有博客:【FaxMiao个人博客】,一个关注Web前端开发技术、关注用户体验、记录前端点滴,坚持更多原创,为大家提供高质量技术博文!前言小程序的跳转方法有很多种,有的人一直只用wx.navigateTo跳…

android+apk启动过程,Android Apk的运行过程(一)—— Activity启动与页面事件传递...

最近在看一本书--《Android 内核剖析》。看名字很唬人,内核剖析,看起来是讲很深入的东西,其实作者自己在前言里也说了对于Android内核深度的一些见解。此书其实只是一些抛砖引玉,对于更深度与更细节的东西并没有涉猎,但…

python在数字后添加字符_Python在字符前后补字符

def addForLR(voldStr, vaddStr, vlength, vleftTrue):"""数字前补0可以补"0"也可以补""# print(tools.addForLR(1123,0,6));# print(tools.addForLR(1123,0,6,False));param voldStr 旧字符串param vaddStr 添加字符串param vlength 字符长…

google 浏览器默认打开控制台_chrome浏览器使用 Console(控制台)

chrome浏览器使用 Console(控制台) 了解如何:打开DevTools Console(控制台),堆叠冗余消息或在自己的行上显示它们,清除或保持输出或将其保存到文件,过滤输出,以及了解其他Console(控制台)设置。 TL;DR 以专用面板形式,或作为任何其他面板的抽屉式面板的形式,打开Console…

android 外部内容分享到app内,外部跳转APP

需求广告推广、华为微服务;通过外部网页或者卡片跳转到我们的app指定界面。如果app已经存在打开app,app不存在跳转下载界面。APP配置android:name".LauncherActivity"android:launchMode"singleTask"android:screenOrientation"…

vue组件一直注册不了_Vue自定义组件及组件的注册方法

为了能在模板中使用,这些组件必须先注册以便 Vue 能够识别。这里有两种组件的注册类型:全局注册和局部注册。至此,我们的组件都只是通过Vue.component全局注册的:Vue.component(component-name, {// ... options ...})该组件名Vue…

android fragment 管理器,Android Fragment 與 Fragment管理器

Android Fragment 與 Fragment管理器首先談談Fragement的需求過去開發人員認為界面之間的跳轉只需要使用多個activity組成就行了;例如下圖中,在Activity-A管理的界面中單擊按鈕后,Activity-A響應事件並啟動Activity-B;而用戶在單擊…

如何把本地yum源给其他机器使用_如何使用系统安装盘做yum的本地源?

第一种方法:1。 在server1上copy所有光盘的内容到/server/rhel5/i386/,并对此目录做好了NFS共享,然后把Server下repodata改名为repodata。ins2。 # createrepo -g /misc/cd/Server/repodata。ins/comps-rhel5-server-core。xml -v /server/rh…

android 手机 报证书错误,Android设备中的SSL证书错误

了解网络科技近年来高速增长,对人们日常生活的影响可通过PC端和移动设备的使用增长数据可以推断。在数字化技术的今天,用户也希望能够在移动设备上保护网站的信息以及用户的数据。SSL证书是保护网站信息的安全协议,也是目前互联网站点必备的安…

手机调试_手机充值不好用?因为正在调试期

“嘀,余额不足,请充值”我们在乘坐公交车的时候,经常会遇到这种情况,上车才发现余额不足,下班又没时间去给公交卡充值,给生活带来了很大的不便,难道就没有更加方便快捷的方法吗?比如…