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

原创 2007年10月06日 08:28:00
(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( );
 }
}
  显示一个重复调用 myDelegateMultiCall 方法,这个方法不知道,也不必知道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><!-- google_ad_client = "pub-1534216445189830"; google_alternate_ad_url = "http://www.fish888.com/noad.html"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; google_ad_channel =""; google_color_border = "FFFFFF"; google_color_link = "0000FF"; google_color_bg = "FFFFFF"; google_color_text = "000000"; google_color_url = "008000"; //--></SCRIPT> 

C# 用委托有什么好处? 它起什么作用?

什么是委托   首先要知道什么是委托,用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西。如何使用委托   在使用委托的时候,你可以像对待一个类一样对待它。即先声明,再实例化。只...
  • qq_36215025
  • qq_36215025
  • 2017年04月10日 09:55
  • 1270

C#中为什么要使用委托的?

为什么要使用委托的
  • zj735539703
  • zj735539703
  • 2015年06月09日 17:29
  • 1115

Unity3D 委托和事件的优点(一)

上周接触到了委托,这周终于在自己的项目中用到了,现在准备用委托和事件的方案替换掉之前的一些使用不足的解决方案!   在此感谢前辈们的优秀文章,我是根据在网上阅读的文章,通过自己的见解,并在自己的项目...
  • VioletTD
  • VioletTD
  • 2015年11月15日 12:37
  • 2208

Java类加载双亲委托模式优点

启动类加载器可以抢在标准扩展类加载之前去装载类,而标准扩展类装载器可以抢在类路径加载期之前去装在那个类,类路径装载器又可以抢在自定义类装载器之前去加载类。所以Java虚拟机先从最可信的Java核心AP...
  • sj940611
  • sj940611
  • 2016年09月22日 16:56
  • 843

什么是叫委托,委托的意义和作用

 Public Class Class1     '什么是叫委托,委托的意义和作用。     '委托概念的产生原因是因为分别出现了代码的设计者和使用者的关系。     '因为这种设计者...
  • office_2007
  • office_2007
  • 2015年02月24日 11:36
  • 1388

Java 利用反射实现C#的委托

一, 观察者模式的缺点 在之前的博文的介绍过观察者模式了. 观察者模式可以让多个观察者同时观察1个被观察者. 也就说被观察者可以1次过执行所有观察者的update()方法. 再通俗d来讲, 就...
  • nvd11
  • nvd11
  • 2015年01月03日 21:37
  • 1494

unity3d 超好用的委托模式

原创 1.先写一个委托类,所有的委托都写在这个类里。 public class MyDelegate { public delegate void LogDelegate(string ...
  • u012322710
  • u012322710
  • 2016年10月24日 15:22
  • 1696

Cocos2d-x 实现委托机制

在 点击打开链接 这里看到一篇关于如何实现委托机制的文章,感觉有点意思,由于这篇文章只是讲了个思路,所以我自己实践了一下,写了一个demo。 实现委托机制demo的情景描述: LayerA是一...
  • Crayon_DyS
  • Crayon_DyS
  • 2013年08月30日 19:34
  • 1833

委托的使用与原理简析

委托的使用与原理简析:委托为什么本质上是数据类型?委托变量直接执行了方法背后原理是什么?多播委托是怎么实现的?...
  • shuaihj
  • shuaihj
  • 2016年11月06日 19:03
  • 1697

C++利用boost::bind实现“委托”

作者:朱之光 C#中的委托有两种绑定方式: 1、绑定到类方法 2、绑定到静态类方法 绑定到静态方法很容易,用一个函数指针就可以实现;而绑定到类方法,就需要考虑传递一个对象实例的参数。 ...
  • jhc_conan516
  • jhc_conan516
  • 2013年12月17日 11:34
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:委托的使用全面剖析(委托好处,为什么要用委托,委托实例精解)
举报原因:
原因补充:

(最多只允许输入30个字)