当前位置:   article > 正文

4.事件_学习笔记

4.事件_学习笔记

学习视频链接:1.C# 的委托与事件大致是怎么一回事_哔哩哔哩_bilibili

2. 事件详解_1_哔哩哔哩_bilibili

1.事件不是委托!事件的本质是委托字段限制器,对外界隐藏了委托实例的大部分功能。
属性和事件类似,属性的本质是字段的限制器,所以属性对于字段,类似于事件对于委托。在代码层面,与属性相同,事件也会在声明时,附带两个索引器add和remove。(属性则是get、set)

事件一般的用法:事件一般是类中的成员,在类外的事件成员,只能添加和移除方法,无法被invoke,相对于委托成员,更加安全。由.net提供的事件,一般是(object sender,EventArgs args)形式,分别是事件的发送者和信息,其中EventHandler的泛型用于指定args的类型。

  1. public class MyClass
  2. {
  3. //如果是使用public delegate, 则外界可直接使用invoke,但事件不能被直接使用
  4. public event Action ValChangedEvent;//数值发生改变时,会触发该事件
  5. //.net提供了EventHandler 作为delegate
  6. //EventArgs 作为 args 用于提供信息
  7. //一般的事件都会有两个参数,分别是(object sender,EventArgs args),其中sender是发送信息者,args 是信息
  8. public event EventHandler<int> MessagePrinted01//命名一般是名词+动词ed,其中EventHandler的泛型是指定args的类型
  9. {
  10. add { }//类似于属性的get set
  11. remove { }
  12. }
  13. private int myVal;
  14. public int MyVal//一般事件的用法,
  15. {
  16. get { return myVal; }
  17. set { myVal = value;
  18. ValChangedEvent?.Invoke();//判空
  19. }
  20. }
  21. }

2.事件的订阅方式,  最常用:事件的拥有者是事件响应者的一个字段成员

  1. using System;
  2. using System.Windows.Forms;
  3. namespace EventExample
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. // 3.事件响应者 form
  10. var form = new MyForm();
  11. form.ShowDialog();
  12. }
  13. }
  14. class MyForm : Form
  15. {
  16. private TextBox textBox;
  17. // 1.事件拥有者 button
  18. private Button button;
  19. public MyForm()
  20. {
  21. this.textBox = new TextBox();
  22. this.button = new Button();
  23. this.Controls.Add(this.button);
  24. this.Controls.Add(this.textBox);
  25. // 2.事件成员 Click 5.事件订阅 +=
  26. this.button.Click += this.ButtonClicked;
  27. }
  28. // 4.事件处理器
  29. private void ButtonClicked(object sender, EventArgs e)
  30. {
  31. this.textBox.Text = "Hello, World!!!!";
  32. }
  33. }
  34. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/645595
推荐阅读
相关标签
  

闽ICP备14008679号