赞
踩
学习视频链接:1.C# 的委托与事件大致是怎么一回事_哔哩哔哩_bilibili
1.事件不是委托!事件的本质是委托字段限制器,对外界隐藏了委托实例的大部分功能。
属性和事件类似,属性的本质是字段的限制器,所以属性对于字段,类似于事件对于委托。在代码层面,与属性相同,事件也会在声明时,附带两个索引器add和remove。(属性则是get、set)
事件一般的用法:事件一般是类中的成员,在类外的事件成员,只能添加和移除方法,无法被invoke,相对于委托成员,更加安全。由.net提供的事件,一般是(object sender,EventArgs args)形式,分别是事件的发送者和信息,其中EventHandler的泛型用于指定args的类型。
-
- public class MyClass
- {
- //如果是使用public delegate, 则外界可直接使用invoke,但事件不能被直接使用
- public event Action ValChangedEvent;//数值发生改变时,会触发该事件
-
- //.net提供了EventHandler 作为delegate
- //EventArgs 作为 args 用于提供信息
- //一般的事件都会有两个参数,分别是(object sender,EventArgs args),其中sender是发送信息者,args 是信息
- public event EventHandler<int> MessagePrinted01//命名一般是名词+动词ed,其中EventHandler的泛型是指定args的类型
- {
- add { }//类似于属性的get set
- remove { }
- }
- private int myVal;
- public int MyVal//一般事件的用法,
- {
- get { return myVal; }
- set { myVal = value;
- ValChangedEvent?.Invoke();//判空
- }
- }
- }
2.事件的订阅方式, 最常用:事件的拥有者是事件响应者的一个字段成员
- using System;
- using System.Windows.Forms;
-
- namespace EventExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- // 3.事件响应者 form
- var form = new MyForm();
-
- form.ShowDialog();
- }
- }
-
- class MyForm : Form
- {
- private TextBox textBox;
- // 1.事件拥有者 button
- private Button button;
-
- public MyForm()
- {
- this.textBox = new TextBox();
- this.button = new Button();
-
- this.Controls.Add(this.button);
- this.Controls.Add(this.textBox);
- // 2.事件成员 Click 5.事件订阅 +=
- this.button.Click += this.ButtonClicked;
- }
-
- // 4.事件处理器
- private void ButtonClicked(object sender, EventArgs e)
- {
- this.textBox.Text = "Hello, World!!!!";
- }
- }
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。