zoukankan      html  css  js  c++  java
  • 不忘本~委托和事件(续)

    今天再说说委托在.net中的发展吧,从1.1,2.0到3.0是有不同的,主要表现在定义,调用上,而使用上还是一样的.
    在 1.0 的C# 版本中,声明委托的唯一方法是使用命名方法。 C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方法,作为编写内联代码的首选方式。 不过,本主题中有关匿名方法的信息同样也适用于 Lambda 表达式。 有一种情况下,匿名方法提供了 Lambda 表达式中所没有的功能。 您可使用匿名方法来忽略参数列表。 这意味着匿名方法可转换为具有各种签名的委托。 这对于 Lambda 表达式来说是不可能的。
     
    下面实例中,我叫一个按钮button1分布使用了最原始的方法和匿名的方法来回调方法,看代码:
       
     1   private void InitializeComponent()
     2 
     3         {
     4 
     5             this.button1 = new System.Windows.Forms.Button();
     6 
     7             this.SuspendLayout();
     8 
     9             // 
    10 
    11             // button1
    12 
    13             // 
    14 
    15             this.button1.Location = new System.Drawing.Point(74, 40);
    16 
    17             this.button1.Name = "testbtn1";
    18 
    19             this.button1.Size = new System.Drawing.Size(75, 23);
    20 
    21             this.button1.TabIndex = 0;
    22 
    23             this.button1.Text = "点我";
    24 
    25             this.button1.UseVisualStyleBackColor = true;
    26 
    27             this.button1.Click += new System.EventHandler(this.button1_Click);
    28 
    29           
    30 
    31             #region 为按钮的单击事件添加一个匿名的方法
    32 
    33             this.button1.Click += delegate(System.Object o, System.EventArgs e)
    34 
    35             {
    36 
    37                 System.Windows.Forms.MessageBox.Show("Click 1");
    38 
    39             };
    40 
    41             this.button1.Click += delegate(System.Object o, System.EventArgs e)
    42 
    43             {
    44 
    45                 System.Windows.Forms.MessageBox.Show("Click 2");
    46 
    47             };
    48 
    49             #endregion

    好了,对委托有了了解后,再来详细的看看MSDN是如何定义事件的吧:

    事件(C# 编程指南)

    或对象可以通过事件其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。

    在典型的 C# Windows 窗体或 Web 应用程序中,可订阅由控件(如按钮和列表框)引发的事件。 可使用 Visual C# 集成开发环境 (IDE) 来浏览控件发布的事件,选择要处理的事件。 IDE 会自动添加空事件处理程序方法和订阅事件的代码。

    下图是一个按钮引发了一个事件:(订阅事件代码)

    1 this.button1.Click += new System.EventHandler(this.button1_Click);
    如果希望取消订阅可以这样写:
    1 this.button1.Click -= new System.EventHandler(this.button1_Click);
    而VS同时帮助我们添加了一个空的处理事件的方法,如下:
    1   private void button1_Click(object sender, EventArgs e)
    2 
    3         {
    4 
    5         }

    而这一切都是VS,IDE自动为我们做好的,不用我们去干预.

    返回目录

  • 相关阅读:
    Jzoj4889 最长公共回文子序列
    Jzoj4889 最长公共回文子序列
    Jzoj4888 最近公共祖先
    Jzoj4888 最近公共祖先
    Jzoj5441【NOIP2017提高A组冲刺11.1】序列
    Jzoj5441【NOIP2017提高A组冲刺11.1】序列
    hdu1269 迷宫城堡
    洛谷P1991 无线通讯网
    左神算法进阶班1_2判断两个树的结构是否相同
    判断两条链表是否相交(公共部分)并找出相交处
  • 原文地址:https://www.cnblogs.com/lori/p/2076425.html
Copyright © 2011-2022 走看看