百度餐饮网站建设,图片1600px做网站,科技资讯网站开发大纲,自己做app一、初步了解事件
定义#xff1a;单词 Event #xff0c;译为“事件”
《牛津词典》中的解释是“a thing that happens,especially something important”通顺的解释就是“能够发生的什么事情”
角色#xff1a; 使对象或类具备通知能力的成员
#xff08;中译#x…一、初步了解事件
定义单词 Event 译为“事件”
《牛津词典》中的解释是“a thing that happens,especially something important”通顺的解释就是“能够发生的什么事情”
角色 使对象或类具备通知能力的成员
中译事件Event是一种使对象或类能够提供通知的成员原文An event is a member that enables an object or class to provide notifications.“对象O拥有一个事件E”想表达的思想是当事件E发生的时候O有能力通知别的对象
使用 用于对象或类间的动作协调与信息传递消息传递 原理 事件模型event model中的两个“5
”发生-响应“中的5个部分——闹钟响了你起床、孩子饿了你做饭…这里隐含着”订阅“关系第5元素比如闹钟、响了、你、起床是4个部分如果没有订阅关系就没有具备通知能力”发生-响应“中的5个动作——1我有一个事件-2一个人或者一群人关心我的这个事件-3我的这个事件发生了-4关心这个事件的人会被依次通知到-5被通知到的人根据拿到的事件信息又称”事件数据“、”事件参数“、”通知“对事件进行响应又称”处理事件“。
提示
事件多用于桌面、手机等开发的客户端编程因为这些程序经常是用户通过事件来”驱动“的各种编程语言对这个机制的实现方法不尽相同Java 语言里没有事件这种成员也没有委托这种数据类型。Java 的”事件“是使用接口来实现的MVC、MVP、MVVM 等模式是事件模式更高级、更有效的”玩法“日常开发的时候使用已有事件的机会比较多自己声明事件的机会比较少所以先学使用
事件的功能 通知 可选的事件参数即详细信息
事件术语
事件的订阅者事件消息的接收者事件的响应者事件的处理者被事件所通知的对象事件信息、事件消息、事件数据统一称做事件参数事件模式本身也是设计模式
事件模型的五个组成部分
事件的拥有者event source对象事件成员event 成员用来通知的工具比如不按下点击click事件就不会发生事件事件的响应者event subscriber对象事件处理器event handler成员——本质上是一个回调方法事件订阅——把事件处理器与事件关联在一起本质上是一种以委托类型为基础的”约定“ 注意
事件处理器是方法成员挂接事件处理器的时候可以使用委托实例也可以直接使用方法名这是个”语法糖“事件处理器对事件的订阅不是随意的匹配与否由声明事件时所使用的委托类型来检测事件可以同步调用也可以是异步调用 例子 MouseEvent事件 mousePressed事件处理器
1 class Program{static void Main(string[] args){Timer timer new Timer();timer.Interval 1000;Boy boy new Boy();Girl girl new Girl();//timer是拥有者 是订阅,Elapsed是事件boy是事件响应者Action是事件处理器//一个事件同时有两个事件处理器的情况timer.Elapsed boy.Action;timer.Elapsed girl.Action;timer.Start();Console.ReadKey();}}class Boy{internal void Action(object sender, ElapsedEventArgs e){Console.WriteLine(Jump!);}}class Girl{internal void Action(object sender, ElapsedEventArgs e){Console.WriteLine(Sing!);}}
2 class Program{static void Main(string[] args){Form form new Form();Controller controller new Controller(form);form.ShowDialog();Console.ReadKey();}}class Controller{private Form form;public Controller(Form form){if(form ! null){this.form form;//form是事件拥有者,Click是事件Controller是事件响应者FromClicked是事件处理器订阅this.form.Click this.FromClicked;} }private void FromClicked(object sender, EventArgs e){this.form.Text DateTime.Now.ToString();}}3 class Program{static void Main(string[] args){Form form new Form();//系统form是微软编写好的类没有办法自定义一个Action//form.Click form.Action;MyForm myForm new MyForm();//myForm是事件拥有者和事件响应者Click是事件FoormClicked是事件处理器是事件订阅myForm.Click myForm.FoormClicked;myForm.ShowDialog();Console.ReadKey();}}class MyForm : Form{internal void FoormClicked(object sender, EventArgs e){this.Text DateTime.Now.ToString();}}4 事件拥有者是事件响应者的字段成员事件响应是订阅自己成员的事件。 class Program{static void Main(string[] args){MyForm myForm new MyForm();myForm.ShowDialog();Console.ReadKey();}}class MyForm : Form{private TextBox textBox;private Button button;public MyForm(){this.textBox new TextBox();this.button new Button();this.Controls.Add(this.button);this.Controls.Add(this.textBox);this.button.Click this.ButtonClicked;this.button.Text Say Hello.;this.button.Top 100;}private void ButtonClicked(object sender, EventArgs e){this.textBox.Text Hello,World!!;}}
二、事件的声明
事件的声明
完整声明简略声明字段式声明field-like
有了委托字段/属性。为什么还需要事件
为了程序的逻辑更加”有道理“、更安全谨防”借刀杀人“
所以事件的本质是微弱字段的一个包装器
这个包装器对委托字段的访问起限制作用相当于一个”蒙版“封装的encapsulation的一个重要功能就是隐藏事件对外界隐藏了委托实例的大部分功能仅暴露添加/移除事件处理器的功能添加/移除事件处理器的时候可以直接使用方法名这是委托实例所不具备的功能
用于声明事件的委托类型的命名约定
1、用于声明Foo事件的委托一般命名为FooEventHandler除非是一个非常通用的事件约束2、FooEventHandler 委托的参数一般有两个由 Win32 API 演化而来历史悠久 第一个是 object 类型名字为 sender实际上就是事件的拥有者、事件的source。第二个是 EventArgs 类的派生类类名一般为 FooEventArgs ,参数名为e。也就是前面讲过的事件参数虽然没有官方的说法但我们可以把委托的参数列表看作是发生后发送给事件响应者的“事件消息” 3、触发 Foo 事件的方法一般命名为 OnFoo即”因何引发“、”事件有因“ 访问级别为 protected不能为 public不然又成了可以”借刀杀人“了
事件的命名约定
带有时态的动词或者动词短语事件拥有者”正在做“什么事情用进行时事件拥有者”做完了“什么事情用完成时