您的位置:首页 > 编程语言 > C#

C#中实现事件的学习笔记

2006-02-25 01:57 429 查看
document.title="学习C#中实现事件的笔记 - "+document.title;

C#中实现事件

事件就是发生的一件事情。把事件信息通知给其它对象的对象称为事件发布方(事件源)。对象可以把自己注册到事件中,该对象称为事件的订户(事件的注册用户),事件可以有一个或多个注册用户。事件只把事件信息通知给所注册的用户。

参考: http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfeventpg.asp
C#中的事件需要借助于委托。它们使用委托调用预订了该事件的用户中的方法。当发布方引发事件时,可能会调用许多委托(视预订该事件的对象数量而定)。
定义事件时,首先由发布方定义委托,然后才能定义事件。事件取决于委托。如:
先定义一个委托delegateMe:
Public delegate void delegateMe(object param);
然后根据委托delegateMe定义事件eventMe:
Public event delegateMe eventMe;

.net中事件的原形如下:

[attributes] [modifiers] event type declarator;
[attributes] [modifiers] event type member-name {accessor-declarations};

其中:
attributes(可选)
可选的声明信息。有关属性和属性类的更多信息,请参见 C# 属性
modifiers(可选)
可选的修饰符,包括:abstract , new, override, static, virtual, extern ,四个访问修饰符之一
type
希望与此事件关联的 delegate
declarator
事件名。
member-name
事件名。
accessor-declarations(可选)
访问器的声明,用于添加或移除客户代码中的事件处理程序。访问器函数为 add 和 remove。只定义一个而不定义另一个是错误的。

为了创建并使用 C# 事件,必须采取以下步骤:
1. 创建或标识一个委托。如果正在定义自己的事件,还必须确保有与事件关键字一起使用的委托。如果已经预定义了事件(例如在 .NET Framework 中),则事件的使用者只需要知道委托的名称。
2. 创建一个类,包含:
a. 从委托创建的事件。
b. (可选)验证用 event 关键字声明的委托实例是否存在的方法。否则,该逻辑必须放置在引发此事件的代码中。
c. 调用此事件的方法。这些方法可以重写一些基类功能。
此类定义事件。
3. 定义一个或多个将方法连接到事件的类。所有这些类都包括:
· 使用 += 运算符和 -= 运算符将一个或多个方法与基类中的事件关联。
· 将与事件关联的方法的定义。
4. 使用此事件:
· 创建包含事件声明的类对象。
· 使用定义的构造函数,创建包含事件定义的类对象。
有关事件的更多信息,请参见MSDN:
· 10.7 事件
· 事件教程
· 事件和委托

示例:

using System;

namespace event_test
{
//
class DelegateEvent
{
public delegate void MyDelegate();
public event MyDelegate NotifyEveryOne;
// 定义一个可能引发事件的方法
public void Notify()
{
if(NotifyEveryOne != null)
{
System.Console.WriteLine("引发了事件!");

//触发事件,与方法的使用方式相同。
NotifyEveryOne(); //事件通知委托对象,委托对象调用实例化时作为参数的方法.
}
}
}

class clsA
{
public void DispMethodA()
{
System.Console.WriteLine("已经把事件NotifyEveryOne通知到ClassA!");
}
}

class clsB
{
public void DispMethodB()
{
System.Console.WriteLine("已经把事件NotifyEveryOne通知到ClassB!");
}
}

class clsTest
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
// 首先实例化一个事件源对象。
DelegateEvent eventSource = new DelegateEvent();

// 实例化事件的订户
clsA objA = new clsA();
clsB objB = new clsB();

// 使用委托把对象及其方法注册到事件中
eventSource.NotifyEveryOne +=new event_test.DelegateEvent.MyDelegate(objA.DispMethodA);
eventSource.NotifyEveryOne +=new event_test.DelegateEvent.MyDelegate(objB.DispMethodB);

eventSource.Notify();
}

}
}

这样,总算完成了C#.net中委托与事件的学习,感觉掌握的难度不是很大,比较容易上手,使用起来比较方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: