• 随便总结几条委托和事件的知识点


    如题,一下关于委托和事件的几点总结如有错误,还请各位朋友指正,谢谢。

    1.委托是事件的基础。
    2.委托类似于C、C++的函数指针,它能够引用函数,在C#中委托是一个对象,并且是类型安全的。
    3.一个委托类型变量可以引用一个或多个方法,这些方法由委托存放在“调用列表”。
    4.委托引用的方法,其签名一般要求要和委托定义相一致(返回值类型,参数个数,参数类型),但不是必须。
    5.委托的定义和方法定义类似,但委托是引用类型,不是方法。

    6.委托声明和实例化
       格式:  访问修饰符 delegate 返回值 方法名(参数列表)

    7.实例化委托的方法:
    (1)使用构造函数实例化,构造函数接受一个目标方法的签名
    (2)直接将目标方法的签名=赋值给委托变量

    8.委托不但可以引用实例方法,还可以引用静态方法。

    9.使用“+”可以将两个委托组合起来,使用“-”可以从一个组合委托删除一个成员
    使用“+=”实现一个委托引用多个方法,使用“-=”实现从一个委托删除一个对方法的引用

    10.匿名方法:本质上是传递给委托的代码块。这是使用委托的另一种方式。
     

    事件
    1.事件涉及两类角色:事件发布者和事件订阅者
    触发事件的对象称为事件发布者,捕获事件并对其做出响应的对象叫做事件订阅者。

    2.事件触发后,事件发布者要发布消息,
    通知事件订阅者进行事件处理,但是事件发布者并不知道哪些事件订阅者,
    这就需要在发布者和订阅者之间存在一个中介,这个中介就是委托。

    3.声明事件的语法和定义一个类的成员非常相似,其实事件就是类成员一种。

    事件格式: 访问修饰符号 event 委托类型 事件名;
    [委托类型]既可以使用预定义的委托类型EventHandler(推荐使用这种),

    【EventHandler作为系统预定义委托类型,委托签名如下:
    public deleaget void EventHandler(Object sender, EventAgrs e);】

    也可以使用自定义的委托类型。

    4.订阅事件:
     本质上讲事件是委托类型,因此事件处理方法必须和委托签名相匹配;
     使用“+=”来订阅事件即可。

     事件发布者.事件名 += 事件处理方法

    还可以通过匿名方法和lambda表达式来订阅事件。
    事件发布者.事件名 += delegate(object sender, EventArgs e)
    {
    //....
    }


    //lambda表达式来订阅事件
    事件发布者.事件名 += (object sender, EventArgs e) =>
    {
    //....
    }

    取消事件和订阅事件相反。通过“-=”实现。

    触发事件:
    if(事件名 != null) //判断事件是否绑定了事件处理方法
    {
     事件名(this,new EventAgrs());//像调用方法一样触发事件
    }


    5.如果想要在事件引发时向事件处理方法传递状态信息(数据),则可以从EventAgrs类派生出一个类来保持信息。

  • 相关阅读:
    python之re模块
    python之shell
    python之zip打包
    shell 处理解析json
    shell 中的传参-字符串传参,dict传参
    xshell 快速复制粘贴设置
    openstack 块存储服务 cinder
    win10系统中安装java环境
    mac上安装pip
    解决 谷歌浏览器报欧呦 崩溃了
  • 原文地址:https://www.cnblogs.com/legecoding/p/2585437.html
Copyright © 2020-2023  润新知