zoukankan      html  css  js  c++  java
  • 初学笔记(C#委托)

    1.委托的概述

          简单说,委托就是把方法当作参数传递。

          委托(delegate)是一种动态调用方法的类型,它与类、接口和数组一样,都属于引用型。在C#中,可以申声明委托类型、创建委托实例、把方法封装在委托对象中。一个完整的饭否发具有方法名、返回值和参数列表,用来引用方法的委托也要求必须具有相同的返回值和参数列表。

         委托对象的本质代表了方法的引用(即内存地址),具有以下特点:

    • 与C++中的指针相似,但不同的是委托是完全面向对象的,是安全的数据类型。
    • 委托允许将方法作为参数传递。
    • 委托可用回调函数。
    • 委托可以把多个方法连在一起。可在触发事件时,启动多个事件处理程序。

    2.委托的声明、实例化与使用

      2.1委托的声明

          委托是一种引用型的数据类型,在C#中使用关键字delegate声明,一般形式如下:

            [访问修饰符] delegate 返回值类型 委托名([参数列表])

      2.2 委托的实例化

        委托是一种特殊的数据类型,因此必须实例化之后才能用来调用方法。一般形式如下:

             委托类型   委托变量名=new 委托型构造函数(委托要引用的方法)

      2.3 使用委托

        实例化之后,就可以通过委托对象调用它所引用的方法。使用委托对象调用所有所有的方法时,必须保证参数的类型、个数、顺序和方法声明匹配。

      2.4使用匿名方法

           允许将代码块作为参数传递,以避免单独定义方法,使用匿名方法创建委托对象的一般形式如下:

             委托类型 委托变量名=delegate([参数列表]){//代码块}

    3.多路广播与委托组合

            实际上,C#允许使用一个委托对象调用多个方法,当向委托添加更多的指向其他方法的引用时,这些引用将被存储在委托的调用列表里,这种委托叫多路广播委托。C#的所有委托都是隐式的多路广播委托。向一个委托的调用列表添加多个方法引用,可以通过该委托一次性调用所有的方法,这个过程称为多路广播。

       实现多路广播的方法有两种:

    • 通过“+”运算符直接将两个同类型的委托对象组合起来。

            例如:

             假设有一委托Calculate

               Calculate  a=new Calculate(Add);

               Calculate b= new Calculate(Mulipty);

               a=a+b;

           由于一个委托对象只能返回一个值,且只返回调用列表中最后一个方法的返回值,因此为了避免混淆,建议在使用多路广播时,每个方法均用void定义。

    • 通过“+=”运算符将新创建的委托对象添加到委托调用列表zhong。还可以使用“-=”运算符来移除调用列表中的委托对象。
  • 相关阅读:
    开工--行胜于言
    操作系统之内存管理
    C陷阱与缺陷读书笔记(一)
    关于复杂度的一些基本的定义
    归并排序
    快速排序
    前序中序后序非递归遍历
    直接插入排序
    冒泡排序
    程序内存映像
  • 原文地址:https://www.cnblogs.com/xiaoning1992/p/3966742.html
Copyright © 2011-2022 走看看