C#事件用法实例浅析
作者:永远爱好写程序 发布时间:2023-02-24 19:22:16
标签:C#,事件
本文实例讲述了C#事件用法。分享给大家供大家参考。具体分析如下:
EventHandler<TEventArgs>的定义如下
public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e) where TEventArgs:EventArgs
第一个参数必须是object类型(是一个对象,包含事件的发送者)
第二个参数是T类型(即泛型),定义了一个T的约束,它必须派生自基类EventArgs
CardInfoEventArgs 就派生自基类EventArgs
举例
#region 测试事件1
//EventArgs类
public class CardInfoEventArgs : EventArgs
{
public string Car { get; private set; }
public CardInfoEventArgs(string car)
{
this.Car = car;
}
}
//触发事件的类
public class CarDealer
{
public event EventHandler<CardInfoEventArgs> NewCardInfo;
public void NewCar(string car)
{
Console.WriteLine("CarDealer,new car{0}", car);
//在触发事件之前,需要检查委托NewCardInfo是否不为空。
//如果没有订阅处理程序,委托就是空
if (NewCardInfo != null)
{
NewCardInfo(this, new CardInfoEventArgs(car));
}
}
}
//处理事件的类
public class Consumer
{
private string name;
public Consumer(string name)
{
this.name = name;
}
//处理事件的方法
public void NewCarIsHere(object sender, CardInfoEventArgs e)
{
Console.WriteLine("{0}:car {1} is new", name, e.Car);
}
}
#endregion
private void button_测试事件1_Click(object sender, EventArgs e)
{
CarDealer dealer = new CarDealer();
Consumer michael = new Consumer("Michael");
dealer.NewCardInfo += michael.NewCarIsHere; //订阅事件
dealer.NewCar("宝马");
Consumer nick = new Consumer("Nick");
dealer.NewCardInfo += nick.NewCarIsHere; //订阅事件
dealer.NewCar("奔驰");
dealer.NewCardInfo -= michael.NewCarIsHere; //取消订阅事件
dealer.NewCar("奥迪");
}
测试结果截图
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 前言加密配置是一个很常见的需求,在spring boot生态中,已经有非常多的第三方starter实现了,博主所在公司也有这种强制要求,一些
- 1.例题题目描述迷宫由 n 行 m 列的单元格组成,每个单元格要么是空地,要么是障碍物。其中1表示空地,可以走通,2表示障碍物。给定起点坐标
- 本文实例讲述了Android 开发使用PopupWindow实现弹出警告框的复用类。分享给大家供大家参考,具体如下:Android开发中相信
- package com.infomorrow.parser_report;import org.junit.Test;public clas
- 本文实例为大家分享了Unity实现截图功能的具体代码,供大家参考,具体内容如下一、使用Unity自带APIusing UnityEngine
- 记录窗口上次关闭的位置和大小namespace PDSafe.Base{ public class Se
- 之前我们学习了如何使用Jpa访问关系型数据库。通过Jpa大大简化了我们对数据库的开发工作。但是,之前的例子中我们只提到了最简单的CRUD(增
- 概念在Java中,对象的生命周期包括以下几个阶段:创建阶段(Created)应用阶段(In Use)不可见阶段(Invisible)不可达阶
- 本文实例讲述了Android开发之拖动条和评分组件用法。分享给大家供大家参考,具体如下:今天闲着没事做就拿出了Android书接着学习,an
- 目录环境依赖数据源方案一 使用 Spring Boot 默认配置方案二 手动创建脚本初始化使用 JdbcTemplate 操作实体对象DAO
- 本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下封装了一个选择年月的控件,XAML代码:<UserCo
- 策略模式的应用场景策略模式是否要使用,取决于业务场景是否符合,有没有必要。是否符合如果业务是处于不同的场景时,采取不同的处理方式的话,就满足
- Android获取分享应用列表详解及实例如果在应用的AndroidManifest.xml中含有 ACTION_SEND 属性,那就证明该应
- 本文实例讲述了在Linux上运行C#的方法。分享给大家供大家参考。具体方法如下:在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个
- 目录1.使用双重for循环打印九九乘法表2.使用双重for循环打印九九乘法表,跳过第五行3.使用do{}while()实现打印九九乘法表1.
- 本文实例讲述了C#通过DataSet读写xml文件的方法。分享给大家供大家参考。具体实现方法如下:DataSet ds = new Data
- 先看代码://设置可以同时处于活动状态的线程池的请求数目。 bool pool = ThreadPool.SetMaxThreads(8,
- 利用Android的ApiDemos的Rotate3dAnimation实现了个图片3D旋转的动画,围绕Y轴进行旋转,还可以实现Z轴的缩放。
- 一、线程的状态NEW: 安排了工作, 还未开始行动RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.BLOCKED: 这几
- 目录概要独立文件专属文件internal storageexternal storage概要当我们查看手机的文件管理器的时候,会发现里面的文