C#——事件
来源:互联网 发布:java注解不属于 编辑:程序博客网 时间:2024/06/05 11:17
消息流
普通事件:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace Test{ // 定义了一个委托类型 delegate void Handler(); class Incrementer { // 声明CountedADozen是个事件成员 // 其次它对应的委托类型为Handle委托类型 public event Handler CountedADozen; public void DoCount() { for( int i = 1; i < 100; i++ ) if( i % 12 == 0 && CountedADozen != null ) CountedADozen(); } } class Dozens { public int DozensCount { get; private set; } public Dozens(Incrementer inc) { DozensCount = 0; inc.CountedADozen += IncrementDozenCount; } void IncrementDozenCount() { DozensCount++; } } class Program { static void Main() { Incrementer inc = new Incrementer(); Dozens dosCount = new Dozens(inc); inc.DoCount(); Console.WriteLine("Number of dozens = {0}", dosCount.DozensCount ); } }}
运行结果:
标准事件:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;// 标准事件EventHandler是定义在System中的一个委托类型// public delegate void EventHandler( object sender, EventArgs e );/* 参数基类 public class EventArgs { // 摘要: // 表示没有事件数据的事件。 public static readonly EventArgs Empty; // 摘要: // 初始化 System.EventArgs 类的新实例。 public EventArgs(); }*/// 默认情况下EventArgs e并不传递参数,需要传递参数的时候需要从上面的基类派生// 这样做所有的EventHandle都有统一的接口形式namespace Test{ class Incrementer { // 声明CountedADozen是个事件成员 // 其次该事件对应的是标准时间类型,不传递参数,注意和下面例子区别 public event EventHandler CountedADozen; public void DoCount() { for( int i = 1; i < 100; i++ ) if( i % 12 == 0 && CountedADozen != null ) CountedADozen( this, null ); } } class Dozens { public int DozensCount { get; private set; } public Dozens(Incrementer inc) { DozensCount = 0; inc.CountedADozen += IncrementDozenCount; } void IncrementDozenCount( object sender, EventArgs e ) { DozensCount++; } } class Program { static void Main() { Incrementer inc = new Incrementer(); Dozens dosCount = new Dozens(inc); inc.DoCount(); Console.WriteLine("Number of dozens = {0}", dosCount.DozensCount ); } }}
运行结果:
带参数标准事件:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;// 标准事件EventHandler是定义在System中的一个委托类型// public delegate void EventHandler( object sender, EventArgs e );/* 参数基类 public class EventArgs { // 摘要: // 表示没有事件数据的事件。 public static readonly EventArgs Empty; // 摘要: // 初始化 System.EventArgs 类的新实例。 public EventArgs(); }*/// 默认情况下EventArgs e并不传递参数,需要传递参数的时候需要从上面的基类派生// 这样做所有的EventHandle都有统一的接口形式// 派生类的作用namespace Test{ public class TestEventArgs : EventArgs { public int CurrentIndex { set; get; } } class Incrementer { // 声明CountedADozen是个事件成员 // 其次该事件对应的是标准时间类型,传递的参数是TestEventAgrs !!! public event EventHandler<TestEventArgs> CountedADozen; public void DoCount() { for( int i = 1; i < 100; i++ ) if( i % 12 == 0 && CountedADozen != null ) { TestEventArgs arg= new TestEventArgs(); arg.CurrentIndex = i; CountedADozen( this, arg ); } } } class Dozens { public int DozensCount { get; private set; } public Dozens(Incrementer inc) { DozensCount = 0; inc.CountedADozen += IncrementDozenCount; } void IncrementDozenCount( object sender, TestEventArgs e ) { Console.WriteLine( "Current index is : {0}", e.CurrentIndex ); DozensCount++; } } class Program { static void Main() { Incrementer inc = new Incrementer(); Dozens dosCount = new Dozens(inc); inc.DoCount(); Console.WriteLine("Number of dozens = {0}", dosCount.DozensCount ); } }}
测试结果:
【返回】
C#——分类目录
0 0
- C#——事件
- c#—委托和事件
- C#—委托与事件
- 【C#】——委托与事件
- C#——委托和事件
- C#——面向对象——事件和委托——事件
- WPF 4.5和C#(5.2)——路由事件WPF事件
- Android的C/S之二——事件输入
- WPF 4.5和C#(5.1)——路由事件
- 离散事件模拟实现——数据结构(C语言版)
- iOS事件处理——Swift & Objective-C 表述
- [C#] 事件
- C#-事件
- Windows Via C/C++:内核模式下的线程同步——事件内核对象
- 概率论经典问题 —— 三个事件 A、B、C 独立 ≠ 三个事件两两独立
- JavaScript—事件流、事件处理程序、事件侦听器、冒泡
- C#——面向对象——事件和委托——委托
- C#——面向对象——事件和委托——Lambda
- json_encode后的数据 在mysql中模糊查询不到?可尝试以下方法
- 微服务-定义、原则和优点
- MyBatis
- hud-1018-Big Number
- 【Android初学者】框架布局:仿微信页面制作
- C#——事件
- Android之Dialog半透明背景消失
- matlab语言基础
- LintCode阶梯训练1-1
- Java线程(七)----Callable和Future
- Python的文件操作
- 909422229________【个人理解】编译时多态与运行时多态
- prototype 是什么东西,原型链的理解,什么时候用 prototype
- git常用操作