zoukankan      html  css  js  c++  java
  • C#委托和事件的区别

    “委托是具有相同签名的函数(方法)的类型,事件是委托的应用方式之一” ---来自评论区老司机

    delegate 是为了在C#中把函数作为对象传来传去而实现的一个“函数包装”。由于在C#中函数是二等公民,你不能把它定义在class的层级上,也不能把它作为对象来传递。因此平台提供了一个盛放函数的“容器“,当你声明了一个这样的容器后,它里面就可以放进所有和你声明时签名一致的函数或方法。
    因为每次声明和创建委托都是在做重复性的工作,不符合OOP的气质,微软提供了泛型委托:
    Action  无参没有返回值的委托
    Action<> 没有返回值的泛型委托
    Func<> 有返回值的泛型委托
    Predicate<> 返回bool值,一个参数
    public delegate typeA MyDelegate(typeB b,typeC c);
    MyDelegate thisDelegate = (i,j) => new typeA();
    
    等价于:
    Func<typeB,TypeC,TypeA> thisDelegate = (i,j) =>  new typeA(); //前两个是参数,最后一个是返回值类型


    C#中的event不是一个类型,而是与“字段”、"属性“、”方法“ 并列的类成员之一。可以理解为delegate是一个类,event是delegate类下的一个字段。event是delegate的应用方式之一。
    事件是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托。
    事件的+=、-=操作符可以在类的外部使用,调用事件只能在声明事件的类的内部使用。
     
  • 相关阅读:
    [USACO07JAN]平衡的阵容Balanced Lineup
    洛谷 P4389 付公主的背包 解题报告
    多项式Ⅱ
    半平面交 板子
    Problem C Dist 解题报告
    二维凸包的板子
    洛谷 P4841 城市规划 解题报告
    广二模拟赛 Problem A: 青春野狼不做理性小魔女的梦 解题报告
    CF 997E 解题报告
    洛谷 P4244 [SHOI2008]仙人掌图 II 解题报告
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/11620960.html
Copyright © 2011-2022 走看看