zoukankan      html  css  js  c++  java
  • C#学习之委托

    • 委托本质上是一个类,隐式继承自System.MulticastDelegate类,该类维护一个带有链接的委托列表,在调用多播委托时,将按照委托列表的委托顺序而调用,该类还包括一个接受两个参数的构造器和3个重要的方法:BeginInvoke、EndInvoke、Invoke;
    • MulticastDelegate 拥有一个带有链接的委托列表,该列表称为调用列表,它包含一个或多个元素。在调用多路广播委托时,将按照调用列表中的委托出现的顺序来同步调用这些委托。.NET提供了简洁的语法来创建委托链:以+= 和-= 操作符分别进行绑定和解除绑定的操作;
    •  
    • 一切在代码,不废话,其实,理解了委托类型和委托类型的变量就ok了,其实委托跟struct、Enum一样,都只是一个抽象类,你可以定义很多具体的类型,这些具体的类型才是真正意义上的委托类型
     1 #define debug
     2 
     3 
     4 using System;
     5 using System.Collections.Generic;
     6 using System.Linq;
     7 using System.Text;
     8 using System.IO;
     9 using System.Threading;
    10 
    11 
    12 namespace test
    13 {
    14     class DelegateEx
    15     {
    16         //定义一个委托类型。注意,CalculateDelegate只是一个类型,和你定义一个class、struct等是一样的,只是定义了一个类型;
    17         //再次强调:这货不是委托,只是一个类型!只是这货也叫委托类型而已,是类型,不是委托!
    18         //这个类型只有一个看点:表示了对其回调方法的签名——返回类型为void,两个int类型的参数;
    19         //委托类型的变量进行实例化时,需要一个方法作为参数,这个参数就要符合这个方法签名,仅此而已;
    20         //可以把委托理解成C++里的函数指针(只是函数指针没有多播/委托链这个概念)
    21         public delegate void CalculateDelegate(int x, int y);
    22 
    23 
    24         //声明一个CalculateDelegate类型的变量。用上一步定义好的类型来声明一个变量,仅仅是声明,还没有进行初始化
    25         private static CalculateDelegate myDelegate;
    26 
    27 
    28         //定义 void Add()方法;很明显,这个方法是符合委托类型CalculateDelegate声明的方法签名的
    29         public static void Add(int x, int y)
    30         {
    31             Console.WriteLine(x + y);
    32         }
    33 
    34         //定义 void Subtract()方法
    35         public static void Subtract(int x, int y)
    36         {
    37             Console.WriteLine(x - y);
    38         }
    39         
    40 
    41         static void Main(string[] args)
    42         {
    43             //对myDelegate进行实例化,可以简写成:myDelegate = Add;
    44             //其实就是把Add方法挂到myDelegate的委托链上,也可以说是把Add绑定到myDelegate上
    45             myDelegate = new CalculateDelegate(Add);
    46 
    47             //把 Subtract 绑定到/挂到 myDelegate上
    48             myDelegate += Subtract;
    49 
    50             //把 Subtract 从 myDelegate上解除绑定,或者说把Subtract从myDelegate摘下来
    51             myDelegate -= Subtract;
    52 
    53             //调用委托,其实就是把对应的参数传进委托链里并依次调用委托链上的方法
    54             myDelegate(100, 200);
    55 
    56 
    57             //重新指定myDelegate的引用,就是把myDelegate的委托链清空,然后添加Add方法上去
    58             myDelegate = Add;
    59 
    60             //往myDelegate上添加方法
    61             myDelegate += Subtract;
    62 
    63             //调用
    64             myDelegate(100,200);
    65 
    66             Console.ReadKey();
    67         }
    68     }
    69 }
  • 相关阅读:
    Android Studio常用插件续
    Android Studio常用小技巧
    Repeater, DataList, 和GridView的区别及使用
    ListView在编辑状态下不能获取修改后的值,无法更新数据
    ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(二)
    ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(一)
    使用Sql分页方法给Repeater控件分页的方法
    使用生活实例理解Asp.net运行时
    .net4.0注册到IIS ,重新注册IIS ,iis注册
    关于.NET编译的目标平台(AnyCPU,x86,x64)
  • 原文地址:https://www.cnblogs.com/zouzf/p/2673059.html
Copyright © 2011-2022 走看看