码迷,mamicode.com
首页 > Web开发 > 详细

.NET基础拾遗(4)委托和事件1

时间:2016-08-02 00:48:07      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

一、委托初窥:一个拥有方法的对象

(1)本质:持有一个或多个方法的对象;委托和典型的对象不同,执行委托实际上是执行它所“持有”的方法。

技术分享

  (2)如何使用委托?

    ①声明委托类型(delegate关键字)

    ②使用该委托类型声明一个委托变量

    ③为委托类型增加方法

    ④调用委托执行方法

技术分享

(3)委托的恒定性:

  组合委托、为委托+=增加方法以及为委托-=移除方法让我们看起来像是委托被修改了,其实它们并没有被修改。事实上,委托是恒定的

  在为委托增加和移除方法时实际发生的是创建了一个新的委托,其调用列表是增加和移除后的方法结果。

技术分享

delegate void PrintFunction();

class Test
{
   public void Print1()//实例方法
   {
      Console.WriteLine( "Print1 -- instance" );
   }

   public static void Print2()//静态方法
   {
      Console.WriteLine( "Print2 -- static" );
   }
}

class Program
{
   static void Main()
   {
      Test t = new Test();                 
      PrintFunction pf;                        
      pf = t.Print1; 

      pf += Test.Print2;
      pf += t.Print1;
      pf += Test.Print2;

      if ( pf != null )                         
      {
          pf();    
       }                          
      else
       {  
           Console.WriteLine( "Delegate is empty" ); 
       }
   }
}

二、匿名方法

  在委托所持有的方法中,如果某个方法只被使用一次,这种情况下,除了创建委托语法的需要,没有必要创建独立的具名方法。匿名方法应运而生。

  匿名方法是在初始化委托时内联(inline)声明的方法。

using System;

class Program
{
  delegate int OtherDel(int InParam);

  static void Main()
  {
    OtherDel del = delegate(int x)
                   {
                     return x + 20;
                   };
    Console.WriteLine("{0}", del(5));
    Console.WriteLine("{0}", del(6));
  }
}

三、Lambda表达式:匿名方法的另一种形式,更易阅读

  (1)本质:简化语法的”语法糖“;

  (2)要点:

    ①Lambda表达式中的参数列表(参数数量、类型和位置)必须与委托相匹配;

    ②表达式中的参数列表不一定需要包含类型,除非委托有ref或out关键字(此时必须显示声明);

    ③如果没有参数,必须使用一组空的圆括号;

  (3)语法:

技术分享

所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。

 

参考文章:

http://www.cnblogs.com/edisonchou/p/3704510.html

http://www.cnblogs.com/kingmoon/archive/2011/05/03/2035696.html

.NET基础拾遗(4)委托和事件1

标签:

原文地址:http://www.cnblogs.com/tiantianle/p/5727498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!