事件 Event
- 事件是委托的一个实例。
- 事件是一个操作,应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。
- 事件需要在类中声明。
- 只需要将要做到事情方法 绑定到事件中即可一起完成所有事件。
声明一个事件
- 事件的声明依赖于委托
public delegate void DoSomeThing(int a); //一个委托
class MyEvent
{
//事件:就是委托的一个变量 加上关键字Event修饰 如下是一个事件
public event DoSomeThing DoSomeThingHandleEvent;
}
到此我们已经声明了一个 DoSomeThingHandleEvent 事件。
事件的使用
- 为事件绑定方法
public delegate void DoSomeThing(int a); //一个委托
class MyEvent
{
//事件:就是委托的一个变量 加上关键字Event修饰 如下是一个事件
public event DoSomeThing DoSomeThingHandleEvent;
public void InvokeStartEvent()
{
Console.WriteLine("---------------------InvokeEvent-----");
if (DoSomeThingHandleEvent != null) //判断这个事件是否为空 不为空则启动事件
{
DoSomeThingHandleEvent.Invoke(5); //执行者 启动,一般通过Invoke启动
//DoSomeThingHandleEvent(5); //也可以这样启动
}
}
}
class Program
{
static void Main(string[] args)
{
MyEvent myevent = new MyEvent();
myevent.DoSomeThingHandleEvent += new DoSomeThing(ShowSomeThing); // 注册事件
myevent.DoSomeThingHandleEvent += ShowSomeThing; //简化 注册事件
myevent.InvokeStartEvent(); //调用了
}
static void ShowSomeThing(int a)
{
Console.WriteLine("showSomething" + a);
}
}
实际使用一个事件
- 热水器提醒事例:
public delegate void WaterHeaterDelegate(int Temperature);
class WaterHeater
{
public event WaterHeaterDelegate WaterDele;
public void Shaoshui() //开始事件
{
for (int i = 0; i <= 100; i++)
{
if (i>95)
{
WaterDele.Invoke(i); //调用启动事件
}
}
}
public void WaterHot(int temperature) //水温提示
{
Console.WriteLine("水已经有{0}C了", temperature);
}
public void WaterBoiling(int temperature) //水烧开
{
Console.WriteLine("水已经烧开了"+ temperature);
}
}
class Program
{
static void Main(string[] args)
{
//方法一:绑定外部类中的方法
WaterHeater water = new WaterHeater(); //热水器实例化对象
water.WaterDele += new WaterHeaterDelegate(water.WaterHot); //绑定事件
water.WaterDele += new WaterHeaterDelegate(water.WaterBoiling); //绑定事件
//water.WaterDele += (new WaterHeater()).WaterHot;//绑定事件的 另一种形式
water.Shaoshui();
//方法二:绑定内部类中的方法
//water.WaterDele += Water_WaterDele;
//water.WaterDele += Water_WaterDele1;
//water.Shaoshui();
}
private static void Water_WaterDele1(int Temperature)
{
Console.WriteLine("水已经烧开了" + Temperature);
}
private static void Water_WaterDele(int Temperature)
{
if (Temperature==100)
{
Console.WriteLine("水已经有{0}C了", Temperature);
}
}
}