c#笔记进阶篇07 事件-尊龙官方平台

c#笔记进阶篇07 事件

el/2024/3/25 15:17:34

c#笔记进阶篇07 事件

——本系列是基于人民邮电出版社《c#2008 c#图解教程》、清华大学出版社《c#入门经典(第五版)》两本书的自学c#笔记,如果您发现了本文的纰漏,还望不吝指正。

写在前边

事件的很多方面和委托相似。事件就好像被简化的针对特殊用途的委托。——人民邮电出版社《c#2008 c#图解教程》

*复习:类是一种能存储数据并执行代码的数据结构,它包含:

  • 数据成员——存储数据
    包括:字段、常量
  • 函数成员——执行代码
    包括:方法,属性,构造函数,索引,运算符,事件,析构函数

在之前基础篇的笔记中:

c#笔记10 类:基础
c#笔记11 类:类成员补充01
c#笔记12 类:类成员补充02

已经介绍了九种类成员类型中的七种(字段,方法,常量,属性,索引,构造函数和析构函数)

1. 事件的定义

事件(event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。——菜鸟教程

  • 事件只负责告诉每个函数什么时候被调用,这些函数到底干了什么,事件并不关心
  • c# 中使用事件机制实现线程间的通信

1.1 事件包含了一个私有的委托

  • 事件提供了对它的私有控制委托的结构化访问
  • 对于事件我们只可以添加、删除或调用事件处理程序
  • 事件触发时,它调用委托来依次调用调用列表中的方法

1.2 事件中使用的代码

  • 委托类型声明:事件和事件处理程序必须有共同的签名和返回类型,它们通过委托类型声明进行描述。
  • 事件处理程序声明:这些在订阅者类的方法(事件处理程序)中的描述会在事件触发时被执行。它们不需要有独立的方法,它们可以是匿名方法或lambda表达式。
  • 事件声明:这个事件发布者类中的声明保存并调用事件处理程序。
  • 事件注册:这段代码把事件连接到事件处理程序。
  • 触发事件的代码:发布者类中的这段代码调用事件导致它调用事件处理程序。

1.3 事件基本处理过程

订阅 -> 发布 -> 执行

  • 首先,应用程序创建一个可以引发事件的对象。当满足条件时,这个对象会引发一个事件。
  • 接着,应用程序订阅事件,定义一个方法,该方法可以与事件指定的委托类型一起使用,把这个方法的一个引用传送给事件
  • 引发事件后,就通知订阅器,调用对象上的事件处理方法

2. 事件的声明

事件的本质是成员,必须声明在类或结构中

  • 由于事件不是类型,我们不能使用对象创建表达式(new表达式)来创建它的对象
  • 事件成员被隐式自动初始化为null

1).在类的内部声明事件,首先必须声明该事件的委托类型。例如:

public delegate void boilerloghandler(string status);

2).然后,声明事件本身,使用 event 关键字

//基于上面的委托定义事件
public event boilerloghandler boilereventlog;
//声明为public,其他类和结构可以在上边注册事件处理程序

上面的代码定义了一个名为 boilerloghandler 的委托和一个名为 boilereventlog 的事件,该事件在生成的时候会调用委托。

*可以通过使用逗号分隔的列表在一个声明语句中声明一个以上的事件。还可以使用static关键字让事件变成静态的

例:下面语句声明了三个事件

public event boilerloghandler myevent1, myevent2, otherevent;

例:下面语句声明静态的事件


http://www.ngui.cc/el/5126708.html

相关文章

c#笔记16 命名空间和程序集

c#笔记16 命名空间和程序集 ——本系列是基于人民邮电出版社《c#2008 c#图解教程》、清华大学出版社《c#入门经典(第五版)》两本书的自学c#笔记,如果您发现了本文的纰漏,还望不吝指正。 写在前边 *复习:一个 c# 程序…

《unity shader入门精要》笔记03 第3章

基础篇 第3章 unity shader基础 ——本系列是基于人民邮电出版社《unity shader入门精要》(冯乐乐著 )的自学unity shader笔记,如果您发现了本文的纰漏,还望不吝指正。 基础篇 第1章 欢迎来到shader的世界第2章 渲染流水线第3章…

经验 - r - 替换字符串中部分字符

r使用gsub()函数提取字符串中部分字符,并进行替换。 使用示例: a <- "abc.d" b <- gsub("a", "x", a) b变为:"xbc.d" 当字符串中存在通配符,如"."时。 可以按如下…

经验 - r - raster package

r中的raster package提供了对栅格数据类型的大量操作, 包括读取、输出、栅格计算等。 1. writeraster 此函数将raster对象输出为外部文件,可以为binary、ascii、geotiff等多种格式。 注意输出binary文件时,为 行优先模式 输出。 2. 绘制ra…

implied do loop of fortran

与传统的do语句相比,implied do语句结构简单(仅一行代码)。 示例: program mainimplicit noneinteger :: iinteger(dimension 3) :: iarrayiarray 4print *, (iarry(i), i 1, 3) end program main 将打印出: 4 …

谷歌地球图像下载

做模型经常要出模型区图, 遥感图片是最好的底图, google earth是最好的来源。 下载ge图像的时候, 经常出现:“图像正在准备中,这可能需要一分钟”的提示。 尊龙官方平台的解决方案: 1. 工具-选项中 高速缓存选项卡&…

fortran 读取命令行参数

自fortran 2003开始,fortran提供了一套标准化的子程序和函数获取命令行参数和环境变量的机制。 这一机制允许用户在模型启动前将参数传递给程序,或将之包含在环境变量中。 1. 获取命令行参数 函数:command_argument_count 子程序…

android启动服务播放音乐(两种启动方式)

两种服务源码下载地址。点击下载 服务有两种类型: 一、启动式服务通过startservice启动 package com.example.service_music;import android.app.service; import android.content.intent; import android.media.mediaplayer; import android.os.bundle; import …

ios——ui学习笔记(1)

viewcontroller控制整个界面的逻辑数据处理,界面仅仅用来获取数据个展示数据 ibaction 由按钮的 event ——》 touch up inside 事件链接iboutlet 标签链接生成类,提供属性,设置属性的类对象等。 新创建的storyboard需要勾选initial&#x…
网站地图