我的博客
2007年

“事件本身其实是以委托的形式存放在类的定义当中,当它们发生的时候,对象回调这个委托。如果我们写好一个方法,然后传递给这个委托,那么它就会做出我们希望它做的事情。”
最好能举例说明这一段话的意思。

 

C# 中事件的确是比较难以理解,我从一个小程序来说吧。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
Console.Write("Please input a number:");

//声明MainMethod类的一个实例
MainMethod m = new MainMethod();

//把我们的方法挂到 m 的NumberAdded事件上
//请注意这里使用了 MainMethod.EventDelegate 这样的方法
//来声明这个事件委托,因为委托也是一种类。
//在类中声明一个委托,就像声明了一个嵌套的类。
m.NumberAdded += new MainMethod.EventDelegate(OutputResult);

//转换用户输入,并调用Add方法相加
m.Add(int.Parse(Console.ReadLine()));

Console.ReadKey(false);
}

//这个是我们的事件处理函数。
static void OutputResult(object sender, EventArgs e)
{
Console.WriteLine("Some Number were added!");
}
}

public class MainMethod
{
//首先声明一个委托
//委托的实例还叫委托,但这里,我们声明的是一个委托类型
//请注意是“类型”。
public delegate void EventDelegate(object sender, EventArgs e);

//然后声明一个事件
//使用刚定义的委托类型
public event EventDelegate NumberAdded;

public int Result;

public void Add(int x)
{
Result = x + 55;

//比较常用的方法,如果事件不为空,就调用。
//其实是说委托EventDelegate是否指向一个方法
//如果有,就不为空。
if (NumberAdded != null)
{
NumberAdded(this, new EventArgs());
}
}

posted on 2007-11-30 08:54  姚晶  阅读(117)  评论(0编辑  收藏  举报