匿名方法

148 篇文章 1 订阅
其实匿名方法说起来也很简单,就是一种不需要名称的内联委托。
     以前,我们要写下面这些代码:
      public class Sample : Form{
          Button btn;
          public Sample{
              btn = new Button();
              btn.Click += new EventHandler(btn_Click);
          }
          private void btn_Click(object sender, EventArgs e){
              this.Close():
          }
      }
      在上例中,为了一个简单的this.Close;而新建一个带有两个参数的方法,而当我们运用匿名方法之后,会变得很简单:
      public class Sample : Form{
          Button btn;
          public Sample{
              btn = new Button();
              btn.Click += delegate{
                  this.Close();
              };
          }
      }
      这样我们可以看到,匿名方法适用于这种不想浪费一个单独方法来完成一项简单操作的情形。同样我们也可以感觉到,匿名方法其实用起来也很简单。
    
      一个匿名方法包括关键字delegate以及一个可选的参数表。在上例中,我已经将参数表省略了,然而如果遇到方法中需要访问参数的情形,则必须提供完整的参数表:
      btn.Click += delegate(object sender, EventArgs e){
          ((Button)sender).Enabled = false;
      };
    
      当然,方法设计也可以如此:
      delegate void DelegateSample();
      static void Main(){
          DelegateSample d = delegate{
              Console.WriteLine("Hello");
          }
          d();
          Console.WriteLine("Again...");
          d();
      }
      这样,就无需单独新建一个方法却可以反复重用这一部分代码。
    
      怎样设计才是一个合法的匿名方法呢?需要满足两点:
      1.参数表匹配。
      2.匿名方法的返回值可以显示转换为目标委托的返回值,或者均无返回值。
    
      此外,C# 2.0还提供方法的自动转换(方法组转换),比如最开始的例子中:
      btn.Click += new EventHandler(btn_Click);
      其实可以直接写为:
      btn.Click += btn_Click;
      编译器会自动进行判断。
    
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值