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。还可以使用“-=”运算符来移除调用列表中的委托对象。
  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/xiaoning1992/p/3966742.html
Copyright © 2011-2022 走看看