.Net中的委托

一、什么是委托?

委托类型声明的格式如下:

   // 申明委托
    public   delegate   void  TestDelegate( string  message);

1.delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托是类型安全和可靠的。

2.委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:

3.委托具有以下特点:

  • 委托类似于 C++ 函数指针,但它是类型安全的。

  • 委托允许将方法作为参数进行传递。

  • 委托可用于定义回调方法。

  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

  • 方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变

  • C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

二、委托在.net中的几种写法

1.在.net 1.0中的写法如下:

ExpandedBlockStart.gif View Code
  // 申明委托签名
  public   delegate   void  TestDelegate( string  message);
// 委托的匹配方法
   public   static   void  TestMethod( string  msg)
        {
            Console.WriteLine(
string .Format( " .net 委托:{0} " , msg));
        }

  
static   void  Main( string [] args)
        {
            
#region  .net 1.x写法
            TestDelegate dele1 
=  TestMethod;
            dele1(
" .net 1.x写法 " );

            TestDelegate dele2 
=   new  TestDelegate(TestMethod);
            dele2(
" .net 1.x写法 " );
            
#endregion
     }

2.在.net 2.0中的写法,.net 2.0中重要的是引入了匿名方法,  当然也可以使用.net1.0中的写法。


ExpandedBlockStart.gif View Code
#region  .net2.x写法
static   void  Main( string [] args)
{
  
// 申明委托对象的时候直接指向一个方法(匿名)的实现
   TestDelegate dele3  =   delegate ( string  msg)
             {
                 Console.WriteLine(
string .Format( " .Net委托:{0} " , msg));
             };
             dele3(
" .net2.x写法--匿名方法 " );
}

3.在.net 3.x中的写法,引入Lambda 表达式,我们来看微软给Lambda 表达式的定义:      

“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。

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


ExpandedBlockStart.gif View Code
   // 该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块
    TestDelegate dele4  =  msg  =>  Console.WriteLine( string .Format( " .Net委托:{0} " , msg));
    dele4(
" .net 3.x写法中可以引入Lambda 表达式 " );

三、委托的应用场景:

只调用单个方法时.
当一个类需要方法说明的多重执行时.
期望使用静态方法执行规范时.
期望得到一个类似事件的模式时.
调用者无需知道无需获取定义方法的对象时
只想给少数既定组件分发执行规范时.
想要简单的组成结构时.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值