委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)

(1) 了解委托的概念
c#
中的委托像 c/c++ 中的函数指针 . 一个多重委托可以订阅多个方法 . 一个委托可以在用来调用函数 , 具体调用哪个函数在运行的时候被确定 .
什么是委托 ? 为什么需要他们 ?
委托是 c# 中类型安全的 , 可以订阅一个或多个具有相同签名方法的 函数指针 . 委托在 c# 中是引用类型 . 委托的必须和所指向的方法具有相同的签名 .
C# System 名字空间有个 Delegate , 他提供了对委托的支持 . 委托有两种类型 : 单一委托和多重委托
单一委托只能订阅一个方法 , 而多重委托可以订阅多个具有相同签名的方法 .
委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。
委托声明定义一个类,它是从 System.Delegate 类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由一个实例和该实例的方法组成;对于静态方法,可调用实体仅由一个方法组成。如果用一组合适的参数来调用一个委托实例,则该委托实例所封装的每个可调用实体都会被调用,并且使用上述同一组参数。
  
( 2 ) 想想使用委托什么时候显示其效果:
创建一个 myDelegate 实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。
当涉及其匿名特性时,委托才能真正显示出其效果。
委托技术是 .NET 引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。
   1 .NET 中的委托技术
   .NET 运行库支持称为“委托”的引用类型,其作用类似于 C++ 中的函数指针。与函数指针不同,委托实例独立于其封装方法的类,主要是那些方法与委托类型兼容。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于 .NET Framework 中的事件处理程序和回调函数。
  定义和使用委托分为声明、实例化和调用 3 个步骤。 委托用委托声明语法声明,如:
delegate void myDelegate( );
  声明一个名为 myDelegate 的委托,它不带参数并且不返回任何结果,如:
class Test
{
  static void F( )
  {
   System.Console.WriteLine ( Test.F );
  }
  static void Main ( )
  {
   myeDelegate d = new myDelegate (F);
   d ( );
  }
}
  创建一个 myDelegate 实例,然后立即调用它。这样做并没有太大的意义,因为直接调用方法会更简单。当涉及其匿名特性时,委托才能真正显示出其效果,如:
void MultiCall (myDelegate d, int count ) {
  for (int I = 0; I < count; I++) {
   d( );
  }
}
  显示一个重复调用 myDelegate MultiCall 方法,这个方法不知道,也不必知道 myDelegate 的目标方法的类型、该方法具有的可访问性或者是否为静态。对它来说最重要的是目标方法与 myDelegate 兼容。
   2 、示例
下面的例子说明了委托的实现,代码如下:
1using System;
2namespace DelegateExample
3{
4 public class TemplateMethod
5 {
6   public delegate float Comp(float a,float b);
7   public Comp myComp;
8   public TemplateMethod()
9   {}
10   public float DoComp(float[] f)
11   {
12    float nf = float.NaN;
13    foreach(float df in f)
14    {
15     if(float.IsNaN(nf))
16      nf = df;
17     else
18      nf = myComp(nf,df);
19    }
20    return nf;
21   }
22
23 }
24}
<script type=text/javascript> </script> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值