zoukankan      html  css  js  c++  java
  • 委托和事件

    这个主题是关于委托的。

    一、委托是什么?

    委托是用delegate定义的函数指针(其实并不只是一个指针,而是包含一组相关数据)。委托类型定义委托变量,委托变量可以用“函数名”、匿名函数和lambda赋值。而委托变量可以调用该函数。

    二、事件是什么?

    事件是对委托的封装,类似属性对字段的封装。

    事件施加的限制是:一、规定委托的类型,void (Object, EventArgs 或其子类 );二、对外只提供增加关联函数+= 操作和减少关联函数-=操作,而没有提供获取该委托变量的接口,防止任意修改。

    只需要在定义委托变量前面加event 关键字就定义了事件,标准事件的委托是EventHandler<T>。编译器会自动生成相关的包装代码。但是也可以自定义包装代码:

    event 委托类型 事件名{ add{} remove{} }

    三、运用委托

    第一步是定义委托类型,第二步定义委托变量,第三步执行委托。

    1. int delegate myFunc(int, int);

    2. myFunc f1, f2;           

    f1 = (x,y)=>x+y;

    f2 = delegate(int x, int y){return x * y;};

    3. f1(1,2); //==3

       f2(1,2);//==2

    委托的运用场合:当你需要传递参数给某个过程时,可以是选择特定的算法,也可以是通知对象去处理。

    事件就是通知对象处理消息这个用途。消息发布者定义事件(委托),而订阅者绑定事件处理函数,当发布者决定引发事件时,就通过调用绑定了的事件处理函数执行相关操作。

    发布者不需要了解事件怎么处理,由谁处理,只需要决定引发事件的时机;而订阅者不需要了解事件是怎么发生的,只需要简单关联并提供处理方案。

  • 相关阅读:
    课表
    hz评测机的迷惑操作
    联赛模拟测试16
    第四阶段总结
    震惊!OI居然还考天体运动
    简单题 题解
    P2340 [USACO03FALL]Cow Exhibition G题解
    题目分享I 三代目
    题目分享H 三代目
    题目分享G 三代目
  • 原文地址:https://www.cnblogs.com/Nobel/p/2798641.html
Copyright © 2011-2022 走看看