事件是一种使对象或类能够提供通知的成员,比如对象O拥有一个事件E,其中想表达的思想就是:当事件E发生的时候,O可以有能力去通知别的对象。
事件用于对象或类间的动作协调与信息传递(消息推送)
- 事件多用在桌面、手机等开发的客户端编程,因为这些程序经常是用户通过事件来驱动的
- java语言里没有事件这种成员,也没有委托这种数据类型,java 的“事件”是使用接口来实现的
- MVC、MVP、MVVM等模式是事件模式更高级、更有效的玩法
事件的五个组成部分:
- 事件的拥有者
- 事件成员
- 事件的响应者
- 事件处理器
- 事件的订阅--把事件处理器和事件关联在一起
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
namespace AsyncExample
{
public class ClassInfoEventArgs : EventArgs
{
public string ClassGrade { get; set; }
public string ClassName { get; set; }
public ClassInfoEventArgs(string ClassGrade,string ClassName)
{
this.ClassGrade = ClassGrade;
this.ClassName = ClassName;
}
}
public class StudentInfo
{
public event EventHandler<ClassInfoEventArgs> showStudentInfo;
public StudentInfo()
{
showStudentInfo += new EventHandler<ClassInfoEventArgs>(showStudentInfoMehtod);
}
private void showStudentInfoMehtod(object sender, ClassInfoEventArgs e)
{
Console.WriteLine("我是" + e.ClassGrade + e.ClassName+"的学生");
}
public void callShowStudentInfo(ClassInfoEventArgs classInfoEvent)
{
showStudentInfo?.Invoke(this, classInfoEvent);
}
}
class Program
{
static void Main(string[] args)
{
ClassInfoEventArgs classInfoEvent = new ClassInfoEventArgs("三年级","二班");
StudentInfo studentInfo = new StudentInfo();
studentInfo.callShowStudentInfo(classInfoEvent);
}
}
}
在上述代码中,主要描述的是student信息传递的方式,事件的响应者和拥有者都是StudentInfo本身,外部使用者调用事件callShowStudentInfo,并且传入参数,showStudentInfo事件处理器响应并且处理产生后续响应事件showStudentInfoMethod方法。