(C#)事件(Event)
事件好像是被简化的针对特殊用途的委托。
事件有如下重要事项:
- 触发(raise)事件: 调用(invoke)或解除(fire)事件的术语。当事件被触发时,所有注册到他的方法都会被依次调用。
- 发布者(publisher): 让事件被其他类或结构可见并使用的类或结构。(事件成员list)
- 订阅者(subscriber): 把事件和发布者关联注册的类或结构.
- 事件处理程序(event handler): 注册到事件的方法。
- 事件是成员,不是类型.并且事件成员被隐式自动初始化为null.
实际上,事件包含了一个私有的委托。
- 事件提供了对它的私有控制委托的结构化访问。
- 与委托中的其他操作不同,对于事件只可以添加,删除,或调用事件处理程序。
所以,只有 +=,-=的运算符能出现在事件的左边。
- 事件被触发时,它调用委托来一次调用列表中的方法。
需要在事件中使用的代码有5部分。
1.2. 源代码中: 委托类型声明 和 事件注册
3.4. 发布者类: 事件声明 和 触发事件的代码
5. 订阅者类: 事件处理程序声明
声明事件
- 发布者类必须提供事件和触发事件的代码.
public event EventHandler MyEvent1; //EventHandler:委托类型, MyEvent1:事件名
- 其中EventHandler 是.NET BCL使用的并被指定为事件使用标准的预定义委托类型。声明如下:
public delegate void EventHandler(object sender, EventArgs e);
触发事件
- 在触发事件前和null比较,从而查看是否包含事件。
- 触发事件本身看起来像调用函数.
if (MyEvent1!=null){
MyEvent1(source,args) ;
}
订阅事件
为事件添加事件处理程序,处理程序必须有和事件委托一致的返回类型和签名。
- += 运算符来为事件增加事件处理程序。
- 方法可以如下:
.实例方法: myClass.MyEvent1 += classA.TimerHandlerA;
.静态方法: myClass.MyEvent1 += ClassB.TimerHandlerB;
.委托形式: myClass.MyEvent1 += new EventHandler(classC.TimerHanderC);
.lambda 表达式: (略)
标准事件 public delegate void EventHandler(object sender, EventArgs e);
- 第一个参数用来保存触发事件的对象的引用。
- 第二个参数用来保存有关状态对于应用程序来书是否合适的状态信息
.注:EventAgs 不能传递任何数据,如果需要传递数据,可以申明一个EventAgs的继承类.
实际上,Object类和EventArgs类为基类,通过继承可以提供了对所有数据类型和所有事件的处理。
public class MyEventArgs:EventArgs
{
public string Message;
public MyEventArgs(string s) //构造函数中,初始化成员Message.
{
Message = s;
}
}
分享到:
相关推荐
C#事件event:妈妈喊儿子回家吃饭
那么什么是事件呢?所谓事件,就是由某个对象发出的消息,这个消息标志着某个特定的行为...那个触发(raise)事件的对象称为事件的发送者(event sender),捕获并响应事件的对象称为事件的接收者(event receiver)
C# Event Bus Demo C# 事件总线实例 非常简单的事件总线实例,学习入门的基础
本文给大家介绍了在C#中,事件(event)的概念和使用方法,文章适合一些初学者学习,主要讲解了一些概念和一些代码案例。
简单的C# Event小例子,通过这个例子可以很快的理解C#的Event使用方法。
Event与委托例子,经典,一看就会,都可运行
C++ 模拟 C# 事件 函数指针 尾随参数
C#中的事件和委托(Delegate,Event)
写了一个简单的事件的例子,实现的功能就是热水器开始烧水,当水温达到一定温度后,警报器开始报警,屏幕也开始提示当前温度。
事件(event),这个词儿对于初学者来说,往往总是显得有些神秘,不易弄懂。而这些东西却往往又是编程中常用且非常重要的东西。大家都知道windows消息处理机制的重要,其实C#事件就是基于windows消息处理机制的,只是...
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就...
C#事件范例,自定义事件发布与事件订阅,如何触发自定义事件。
摘要:C#源码,控件类库,EventLog,事件日志 C#使用EventLog组件读写事件日志的实例源码,C#读取事件日志的内容,一个较简单的实例,源码参考价值高,特别是对初学者来说。
C#事件的简单举例 包括用户控件的事件举例 和一个类的事件举例
主要介绍了C#3.0使用EventLog类写Windows事件日志的方法,以简单实例形式分析了C#写windows事件日志的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本篇文章给大家分享了在C#中event内存泄漏的相关知识点以及代码分享,有兴趣的朋友参考学习下。
.net c# 动态 添加event .net c# 动态 添加时间
完整代码、c#写入事件查看器DEMO,visual studio 2010,eventLog控件
04.C# 知识回顾 - Event 事件.pdf 04.C# 知识回顾 - Event 事件.pdf