什么是事件
事件基本上说是用户操作,如按键、点击、鼠标移动等等,或是一些提示信息,如系统生成的通知。 应用程序需要在事件发生时响应。事件是一种引用类型,实际上也是一种特殊的委托。通常,每个事件的发生都会产生发送方和接收方,发送方式指引发事件的对象,接收方则是指获取、处理事件。
事件定义的语法
访问修饰符 event 委托名 事件名
事件要与委托一起用。
由于在事件中使用了委托,因此需要在定义事件前先定义委托。
在定义事件后需要定义事件所使用的方法,并通过事件来调用委托。
基本案例:
using System;
namespace MySpace
{
class Program
{
//定义委托
public delegate void SayDelegate();
//定义事件
public event SayDelegate SayEvent;
//定义委托中调用的方法
public void SayHello()
{
Console.WriteLine("Hello Event!");
}
//创建触发事件的方法
public void SayEventTrigger()
{
//触发事件,必须与事件同名方法
SayEvent();
}
//主函数
static void Main(string[] args)
{
//创建Program类的实例
Program program = new Program();
//实例化事件,使用委托
program.SayEvent = new SayDelegate(program.SayHello);
//调用触发事件的方法
program.SayEventTrigger();
Console.ReadKey();
}
}
}
运行结果:
复杂的案例
在事件中使用多播委托完成预定不同商品的操作
using System;
namespace MySpace
{
class MyEvent
{
//定义委托
public delegate void BuyDelegate();
//定义事件
public event BuyDelegate BuyEvent;
//定义委托中使用的方法
public static void BuyFood()
{
Console.WriteLine("Buy Food");
}
public static void BuyCake()
{
Console.WriteLine("Buy Cake");
}
public static void BuyFlower()
{
Console.WriteLine("Buy Flower");
}
public void InvokeEvent()
{
BuyEvent();
}
}
class Program
{
static void Main(string[] args)
{
//创建MyEvent类的实例
MyEvent myEvent = new MyEvent();
//实例化事件,使用委托指向处理方法
myEvent.BuyEvent += new MyEvent.BuyDelegate(MyEvent.BuyFood);
myEvent.BuyEvent += new MyEvent.BuyDelegate(MyEvent.BuyCake);
myEvent.BuyEvent += new MyEvent.BuyDelegate(MyEvent.BuyFlower);
//调用触发事件的方法
myEvent.InvokeEvent();
Console.WriteLine();
}
}
}
运行结果:
注意的是:
在使用事件时如果事件的定义和调用不在同一个类中,实例化的事件只能出现在+=或者-=操作符的左侧。