P20、21、22事件详解
一、P20、21、22内容总结
- 事件的概念P20
- 事件的应用P21:四个实例
- 事件的声明P22
- 问题辨析P22:事件与委托的关系
二、事件的概念P20
- 事件的角色:使对象或者类具备通知能力的成员
对象O拥有一个事件E:“当事件E发生的时候,O有能力通知别的对象” - 事件的功能:通知+可选的事件参数(详细信息)
- 事件中的一些术语
”事件的订阅者“=事件消息的接收者=事件的响应者=事件的处理者=被事件所通知的对象
”事件参数“=事件信息=事件数据=事件消息 - 提示
事件多用于桌面、手机等开发的客户端编程
Java中没有事件,也无委托。C#中事件由接口实现
三、事件的应用P21
- 事件模型五个组成部分
1)事件拥有者(事件的source):对象或者类
2)事件成员(事件)
3)事件响应者:对象或类
4)事件处理器EventHandle:事件响应者的方法成员
5)事件订阅
–将事件处理器与事件关联在一起
–事件处理器与事件需要遵循同一种“约定”才可以进行匹配,这种“约定”是以委托类型为基础的 - 使用C#事件实例
实例一: “一个事件可以同时挂接多个事件处理器”
//每1秒屏幕上打印jump和sing
class Program
{
static void Main(string[] args)
{
//timer 事件的拥有者
Timer timer = new Timer();
timer.Interval = 1000;
//boy&girl 事件响应者
Boy boy = new Boy();
Girl girl = new Girl();
//Elapsed 事件
//Action 事件处理器
//事件订阅
timer.Elapsed += boy.Action;
timer.Elapsed += girl.Action;
timer.Start();
Console.ReadLine();
}
}
class Boy
{
//Action 事件处理器
internal void Action(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Jump");
}
}
class Girl
{
//Action 事件处理器
internal void Action(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Sing");
}
}
实例二
事件拥有者与事件响应者是完全不同的两个对象;
事件响应者用自己的方法(事件处理器)订阅事件,当事件发生时事件处理器就执行了。
//当鼠标点击窗口时,窗口名称显示当前时间
static void Main(string[] args)
{
//form 事件的拥有者
Form form = new Form();
//事件的响应者
Controller controller = new Controller(form);
form.ShowDialog();
}
class Controller
{
private Form form1;
public Controller(Form form)
{
if(form!=null)
{
this.form1 = form;
//Click 事件
//FormClicked 事件处理器
//事件订阅
this.form1.Click += this.FormClicked;
}
}
//FormClicked 事件处理器
private void FormClicked(object sender, EventArgs e)
{
this.form1.Text = DateTime.Now.ToString();
}
}
实例三
事件拥有者与事件响应者是同一个对象;
一个对象拿着自己的方法订阅和处理自己的事件
注意:派生==继承,即在原有的某个类的基础上扩展功能
static void Main(string[] args)
{
//form 事件的拥有者&事件的响应者
MyForm form = new MyForm();
//Click 事件
//FormClicked 事件处理器
//事件订阅
form.Click += form.FormClicked;
form.ShowDialog();
}
class MyForm : Form
{
//FormClicked 事件处理器
internal void FormClicked(object sender, EventArgs e)
{
this.Text = DateTime.Now<