www.js36663.com[.NET] C# 知识回顾 - 事件入门

2019-12-17 作者:www.js36663.com   |   浏览(132)

C# 知识回想 - 事件入门

【博主】反骨仔    【原文】www.js36663.com[.NET] C# 知识回顾 - 事件入门。  

  在此以前经过《C# 知识回想 - 委托 delegate》、《C# 知识回看 - 委托 delegate (续)》介绍了委托的基本知识,本次我们来拜见事件。

 

目录

  • What's 事件
  • 事件的习性汇总
  • www.js36663.com[.NET] C# 知识回顾 - 事件入门。事件的订阅和撤消
    1. 用 IDE 订阅事件
    2. 以编制程序方式订阅事件
    3. 用匿超级模特式订阅事件
    4. 收回订阅

 

www.js36663.com[.NET] C# 知识回顾 - 事件入门。一、What's 事件

  类或对象足以由那件事件向别的类或对象发出通报。

www.js36663.com[.NET] C# 知识回顾 - 事件入门。  发行者:触发(引发)事件的类或对象;

  订阅者:选拔(或处理)事件的类或对象。

 

  在过去的支付中,精髓的 WinForm 和 WebForm 是都经过事件驱动来显示他们的有力之处。通过 IDE,轻松订阅开关和豆蔻梢头部分输入控件引发的平地风波,自动在类的空白点为大家增添事件管理程序的主意和订阅该事件的代码

 

二、事件的品质汇总

  • 发行者明确何时引发平地风波;订阅者决定哪些对事件作出响应。

  • 七个平地风波能够被多少个类或对象进行订阅,订阅者能够轻易地筛选适宜的秘诀开展管理。

  • 未有订阅者进行订阅的风云永久也不会被触发

  • WinForm 和 WebForm 中的事件见惯司空用来表示客商实施的某项操作。

  • 当叁个风浪蕴含八个订阅者时,在触发该事件的相同的时间会暗中同意以协同的花样调用事件管理程序。

  • 事件基于 EventHandler 委托和 EventArgs 基类。

 

三、事件的订阅和裁撤

  1.用 IDE 订阅事件

www.js36663.com 1

图3-1-1 新建五个 WinForm 项目

www.js36663.com 2

图3-1-2 由图1双击时所机关创设的代码

www.js36663.com 3

图3-1-3 除了图2,在 InitializeComponent 方法也自动扩大了那行代码

 

  2.以编程方式订阅事件

  要是现在是一个新的 WinForm 程序,我们透过手动的主意本人创制事件。在 InitializeComponent 方法上边输入 this.Load +=,然后会现身提示,那个时候大家按下“Tab 键”,

www.js36663.com 4

 

图3-2-1

 

  会发掘也会活动成立事件管理程序,效果跟上黄金时代节的间接双击空白处创造的代码能够说是同蓬蓬勃勃的,代码如下:

 1     public partial class Form1 : Form
 2     {
 3         public Form1()
 4         {
 5             InitializeComponent();
 6 
 7             this.Load += Form1_Load;
 8         }
 9 
10         private void Form1_Load(object sender, EventArgs e)
11         {
12             throw new NotImplementedException();
13         }
14     }

 

  这一次,大家一向运用 lambda 形式成就事件的注册:点击空白处展现鼠标点击时的坐标。

 1     public partial class Form1 : Form
 2     {
 3         public Form1()
 4         {
 5             InitializeComponent();
 6 
 7             //this.Load += Form1_Load;
 8 
 9             //点击事件(lambda 方式创建)
10             this.Click += (s, e) =>
11             {
12                 MessageBox.Show($"{((MouseEventArgs)e).Location}");
13             };
14         }
15 
16         private void Form1_Load(object sender, EventArgs e)
17         {
18             throw new NotImplementedException();
19         }
20     }

  【备注】内容提到 $: (C# 6) 的语法,vs2016 以上才支撑。$"{msg}" 相当于string.Format("{0}", msg卡塔尔(قطر‎, msg 指变量。

www.js36663.com 5

 图3-2-2

 

  3.用匿超方式订阅事件

 1         public Form1()
 2         {
 3             InitializeComponent();
 4 
 5             //this.Load += Form1_Load;
 6 
 7             //点击事件(lambda 方式创建)
 8             //this.Click += (s, e) =>
 9             //{
10             //    MessageBox.Show($"{((MouseEventArgs)e).Location}");
11             //};
12 
13             //使用匿名方法创建事件
14             this.Click += delegate (object sender, EventArgs e)
15             {
16                 var mouseEventArgs = (MouseEventArgs)e;
17                 var mouseLocation = mouseEventArgs.Location;
18 
19                 MessageBox.Show($"X: {mouseLocation.X}, Y: {mouseLocation.Y}");
20             };
21         }

  【注意】提出而不是接收无名函数来订阅事件,因为那样会直接的充实废除订阅时的难度。除非您明确自身不会吊销订阅。

 

  4.打消订阅

  你能够接收打消订阅事件,来防御触发对应的事件管理程序。你能够采用-= 进行撤销事件的订阅。

            this.Load -= Form1_Load;  //使用减法赋值运算符 (-=) 取消订阅事件

 

 传送门

  《C# 知识回想 - 种类化》

  《C# 知识回看 - 表达式树 Expression Trees》

  《C# 知识回看 - 天性Attribute》、《剖判AssemblyInfo.cs - 精晓常用的特点 Attribute》

  《C# 知识回看 - 委托 delegate》、《C# 知识回想 - 委托 delegate (续)》

 

 


【参考】

【参照他事他说加以考察】微软 MSDN 官方文书档案

 

本文由金沙贵宾会官方网址发布于www.js36663.com,转载请注明出处:www.js36663.com[.NET] C# 知识回顾 - 事件入门

关键词: