zoukankan      html  css  js  c++  java
  • C#图解教程学习笔记——委托

    一、委托概述
    委托和类一样,是用户自定义类型,也是引用类型。但类表示的是数据和方法的集合,而委托持有一个或多个方法,以及一系列预定义操作。
    可以通过以下操作步骤来使用委托:
    (1)声明一个委托类型。委托声明看上去和方法声明相似,只是没有实现块。
    (2)使用该委托类型声明一个委托变量。
    (3)创建委托类型的对象,把它赋值给委托变量。新的委托对象包括指向某个方法的引用,这个方法和第一步定义的签名和返回类型一致。
    (4)可以选择为委托对象增加其他方法。这些方法必须与第一步中定义的委托类型有相同的签名和返回类型。
    (5)在代码中你可以像调用方法一样调用委托。在调用委托时,其包含的每个方法都会被执行。
    注:
    (1)委托中,方法的列表称为调用列表。
    (2)委托持有的方法可以来自任何类或结构,可以是实例方法也可以是静态方法,只要它们与委托类型有相同的签名和返回类型即可。
    (3)如果一个方法在调用列表中出现多次,当委托被调用时,每次在列表中遇到该方法时它都会被调用一次。
    (4)委托是恒定的。委托对象被创建后不能再被改变。

    二、委托的类型声明与对象创建
    1. 委托类型声明

    语法:

    2. 委托对象创建
    创建委托对象会为委托分配内存,还会把第一个方法放入委托调用列表。
    创建方法一:

    创建方法二(快捷语法):

    图示:

    三、委托相关操作
    由于委托对象被创建后就是恒定不可变的,所以组合委托、为委托添加方法、从委托移除方法,实质上都是创建了一个全新的委托。
    1. 组合委托
    组合委托:实质上是创建一个新的委托,其调用列表连接了作为操作数的两个委托的调用列表副本。
    示例:

    图示:

    2. 为委托添加方法
    C#支持使用+=运算符为委托的调用列表增加方法。
    示例:

    3. 从委托移除方法
    C#支持使用-=运算符从委托的调用列表移除方法。
    示例:

    注:
    (1)如果在调用列表中有多个实例,-=运算符将从列表最后开始搜索,并且移除第一个与方法匹配的实例。
    (2)试图删除委托中不存在的方法没有效果。
    (3)试图调用空委托会抛出异常。可以通过把委托和null进行比较来判断委托列表是否为空。如果调用列表为空,则委托是null。
    4. 调用委托
    可以像调用方法一样简单地调用委托。调用委托的参数将会用于调用列表中的每个方法。
    示例:

    图示:

    四、委托的参数和返回值问题
    1. 调用带引用参数的委托
    如果委托有引用参数,参数值会根据调用列表中的一个或多个方法的返回值而改变,最后的值是委托的调用列表中所有方法依次共同作用于参数的结果。
    2. 调用带返回值的委托
    如果委托有返回值并且调用列表中有一个以上方法,则委托调用的返回值就是调用列表中最后一个方法返回的值,其他返回值被忽略。
    3. 使用匿名方法给委托赋值
    示例:

     

  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/wujuntian/p/10990334.html
Copyright © 2011-2022 走看看