`
isiqi
  • 浏览: 16359362 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

(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 <place w:st="on">Main</place> ( )

 {

  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.<place w:st="on">NaN</place>;

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}

分享到:
评论

相关推荐

    linux_shell实例精解

    "Linux Shell实例精解"这本书籍正是针对这个主题,为初学者提供了丰富的学习资源。 在Linux世界中,Shell扮演着至关重要的角色。它不仅用于执行单个命令,还能通过脚本进行批量处理、文件操作、系统管理、数据处理...

    减速器设计实例精解.zip

    总的来说,《减速器设计实例精解》这份资料全面系统地介绍了减速器的设计原理和实践方法,对于从事机械设计、自动化设备研发的工程师来说,是一份非常有价值的参考资料。通过学习,可以提升对减速器设计的理解,提高...

    3ds Max全面攻克_全面实例精解_CD4

    3ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max...

    midasCivil桥梁工程实例精解

    通过实例精解阐述midas Civil 在桥梁工程结构分析与设计方面的应用

    Oracle PLSQL实例精解

    Oracle PLSQL实例精解

    MATLAB神经网络原理与实例精解pdf

    《MATLAB神经网络原理与实例精解》是一本深度学习初学者的理想教程,它全面涵盖了神经网络的基础理论以及MATLAB实现方法。这本书旨在帮助读者理解神经网络的工作原理,并通过具体的MATLAB实例,让读者能够动手实践,...

    perl实例精解中文版

    在实际工作中直接使用《PERL实例精解》(原书第4版)中的示例程序,从而大大节省开发人员的时间,并且能有效地避免编程错误。《PERL实例精解》(原书第4版)内容简洁、示例丰富,非常适合于Perl语言初学者阅读,对于Perl...

    Elasticsearch7.0实例精解 源代码.zip

    Elasticsearch 7.0 实例精解源代码是一份深度解析Elasticsearch 7.0版本核心功能和实际应用的资源集合。这份压缩包包含了详细的示例代码,旨在帮助开发者更好地理解和掌握Elasticsearch的强大功能。以下是基于...

    C++Builder4高级编程实例精解

    C++Builder4高级编程实例精解

    ORACLE PLSQL实例精解(第4版)

    高清pdf——ORACLE PLSQL实例精解(第4版) 拿去用不谢.

    MATLAB神经网络原理与实例精解

    《MATLAB神经网络原理与实例精解》首先简要介绍了MATLAB软件的使用和常用的内置函数,随后分门别类地介绍了BP网络、径向基网络、自组织网络、反馈网络等不同类型的神经网络,并在每章的最后给出了实例。在全书的最后...

    C++Builder6编程实例精解.pdf

    本书《C++Builder6编程实例精解》由赵明现编著,涵盖了从基础的开发环境介绍到高级的网络编程与数据库设计,通过14章内容,逐步引导读者深入理解并掌握C++Builder6的各种编程技术和技巧。以下为本书中涉及的关键知识...

    C++Builder5 and C++Builder6编程实例精解编程实例精解(包含 Builder6 PDF档).7z

    压缩包中的“C++Builder5 and C++Builder6编程实例精解编程实例精解(包含 Builder6 PDF档)”很可能是本书的电子版,内容可能涵盖这两个版本的使用教程、实例解析以及可能的进阶技术。书中可能包含了如何使用IDE...

    SuperMap实例精解VB GIS

    《SuperMap实例精解VB GIS》是一本深入探讨如何使用SuperMap软件与Visual Basic(VB)进行GIS(地理信息系统)开发的专业书籍。该书通过丰富的实例,详细讲解了如何利用VB语言结合SuperMap的API来构建GIS应用。下面...

    ORACLE PLSQL实例精解(第4版).part2

    ORACLE PLSQL实例精解(第4版).part2

    西门子S7-200PLC编程实例精解

    西门子S7-200PLC编程实例精解 PDF 高清版

    C++Builder6编程实例精解

    ### C++Builder6编程实例精解 #### 一、C++Builder6简介及特点 **C++Builder6**是一款由Borland公司推出的强大的32位Windows开发工具,旨在为开发者提供一个高效的环境来创建高性能的Win32应用程序。与早期版本...

    计算机专业人员书库 Windows Api For 2000_XP实例精解

    《Windows API for 2000_XP实例精解》是专为计算机专业人员提供的一本深入探讨Windows API编程的书籍。Windows API(应用程序接口)是Microsoft Windows操作系统的核心组件,它为开发者提供了与操作系统交互的函数...

Global site tag (gtag.js) - Google Analytics