• C#的委托事件总结


    什么是委托?
    1.委托是C#中由用户自定义的一个类型。
    2.类表示的是数据和方法的集合,而委托实际上是一个能持有对某个或某些方法的引用的类。
    3.与其他的类不同,委托类能拥有一个签名,并且他只能持有与他的签名相匹配的方法的引用。


    如何使用委托
    1.声明一个委托类型。
    2.使用一个委托类型声明一个委托变量。
    3.创建委托类型的对象,把它赋值给委托变量。该委托对象包含某个方法的引用,这个方法和第一步定义的签名一致。
    4.为委托对象增加其他方法。
    5.像方法一样调用委托。此时,委托持有的每一个方法都会依次执行。

    声明委托
    public delegate void TestDelegate(int num);

    1.声明委托的语法与定义方法的语法类似,但没有方法体,声明的前面加关键字delegate。

    2.声明委托相当于声明了一个新类,所以可以在任何声明类的相同地方声明委托。

    3.可以在委托的声明上应用任何常见的访问修饰符,如public,private等。


    创建委托对象
    方式1:使用带new运算符的对象创建表达式。
    TestDelegate td1 = new TestDelegate(TestMethod);
    方式2:使用方法名直接创建
    TestDelegate td1 = TestMethod;
    方法名可以来自任何类和结构,可以是实例方法,也可以是静态方法,方法签名必须和委托的签名一致。

    组合委托
    添加:
    A = B + C;
    A += B;
    移除:
    A-= B;
    如果委托为空之后调用会报空指针,如果添加两个相同的委托,移除委托从列表的结尾移除查找的到的第一个,如果移除的委托不存在,不会报错。

    带返回值的委托调用
    多个方法加减,只有最后一个方法的返回值起作用。如果需要总体生效需要声明参数为ref。
    调用列表中最后一个方法的返回值就是委托调用最终的返回值。
    调用列表中其他所有方法的返回值都会被忽略(覆盖)。
    委托签名中的参数列表不为空时,需要区分该参数是值类型还是引用类型。若为引用类型参数,该参数的值可能会根据调用列表中的一个和多个方法而发生改变。

    多播委托
    持有多个方法的引用的委托,称为多播委托。
    在调用多播委托时,如果调用列表中的某一个方法抛出异常,整个迭代就会停止,该方法之后的所有方法将不会被调用。
    Delegate类的GetInvocationList()方法,返回一个Delegate对象数组,该数组中的每个元素都是一个委托对象,该对象持有原多播委托调用列表中的一个方法。
    delegate(int num) {
    //方法体
    };

  • 相关阅读:
    编程填空:第i位替换
    poj 2192 Zipper
    3:拦截导弹
    vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化
    数字三角形【汇总】
    codevs 1576 最长严格上升子序列
    3299 有序数组合并求第K大问题
    输出数组第k大的元素
    Java线程同步的Monitor机制(Lock配合Condition)
    堆排序Heapsort的Java和C代码
  • 原文地址:https://www.cnblogs.com/txfd/p/10128817.html
Copyright © 2020-2023  润新知