C#入门详解(11)
Posted jingjingweixiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#入门详解(11)相关的知识,希望对你有一定的参考价值。
事件的应用
实例演示
派生与拓展
事件模型的五个组成部分
1,事件的拥有者(event source,对象)
2,事件成员(event,成员)
3,事件的响应者(event subscriber,对象)
4,事件处理器(event handler,成员)-----本质上是一个回调方法
5,事件回调------把事件处理器与事件关联在一起,本质上是一种以委托类型为基础的约定
注意
事件处理器是成员方法
挂接事件处理器的时候,可以使用委托类型,也可以直接使用方法名,这是个语法糖
事件处理器对事件的订阅不是随意的,匹配与否由声明事件时所使用的委托类型来检测
事件可以同步调用也可以异步调用
事件的各种模型
事件的拥有者 订阅 事件的响应者
class Program static void Main(string[] args) System.Timers.Timer timer = new System.Timers.Timer();//事件的拥有者 timer.Interval = 1000; Boy boy = new Boy();//事件的响应者 //Elapsed为事件 Action为事件处理器 timer.Elapsed += boy.Action;//订阅操作 timer.Start(); class Boy internal void Action(object sender, ElapsedEventArgs e) Console.WriteLine("Jump");
事件的拥有者和事件响应者不相同
static class Program /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); Form form = new Form(); Controller control = new Controller(form); form.ShowDialog(); public class Controller private Form form; public Controller(Form form) if (form!=null) this.form = form; this.form.Click += this.ShowTime; private void ShowTime(object sender, EventArgs e) this.form.Text = DateTime.UtcNow.ToString();
事件的拥有者和事件的响应者是同一个对象
static class Program /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); MyForm form = new MyForm(); form.Click += form.Clicked; form.ShowDialog(); public class MyForm : Form internal void Clicked(object sender, EventArgs e) this.Text = DateTime.UtcNow.ToString();
事件的拥有者是事件响应者的字段成员,事件的响应者用自己的方法订阅着自己字段成员的事件
static class Program /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); Button button = new Button(); TextBox textBox = new TextBox(); MyForm myForm = new MyForm(button, textBox); myForm.ShowDialog(); public class MyForm : Form private Button Button; private TextBox TextBox; public MyForm(Button button,TextBox textBox) this.Button = button; this.TextBox = textBox; this.Controls.Add(this.Button); this.Controls.Add(this.TextBox); this.Button.Text = "Click Me"; this.Button.Top = 100; this.Button.Click += this.showMessage; private void showMessage(object sender, EventArgs e) this.TextBox.Text = "233333";
以上是关于C#入门详解(11)的主要内容,如果未能解决你的问题,请参考以下文章
《C#零基础入门之百识百例》(八十三)ArrayList数组列表详解 -- 代码示例