想了很久,总算弄明白了C#中的事件是怎么回事。呵呵...
下面是一个最简单的事件例子:
class Test
{
public delegate void EventHandler(); //①申明委托;
public event EventHandler Handler; //②定义事件;
static void Main()
{
Test t=new Test();
t.Handler +=new Test.EventHandler(MethodA); //③将事件与委托关联(订阅事件);
t.Handler(); //④触发事件;
}
public static void MethodA()
{
System.Console.WriteLine("方法A");
}
}
注意:
1.委托delegate和事件Event的关系:
委托(delegate)相当于一系列函数的抽象类,这一系列函数要求拥有相同的参数和返回值;而事件(Event)相当于委托的一个实例,只是前面冠有Event关键字。
2.在关联委托和事件时,应该注意:
①委托和事件都应该有应用对象来引用。
②传入委托中的函数,只写函数名,不带括号。
3.事件的触发,必须要有由具体的引用对象来触发。
将事件和委托和委托方法写在类外的代码为:
using System;
class Test
{
static void Main()
{
A a=new A(); //为了引用Handler而实例化A对象;
B b=new B(); //为了引用B对象中的A方法而实例化B对象;
a.Handler +=new A.EventHandler(b.MethodA);
a.Start();
}
}
class A
{
public delegate void EventHandler();
public event EventHandler Handler;
public void Start()
{
if(Handler!=null)
{
Handler();
}
}
}
class B
{
public void MethodA()
{
Console.WriteLine("方法A");
}
}