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

    事件是受限制的委托,是委托一种特殊应用,事件是委托的一个修饰符,加了event(事件)修饰之后,委托就被限制了,

    假设这个加了修饰符的事件称为事件1,通过事件1,我们可以更好地控制注册和注销,也就是对于一个外部类,他只能“注册自己+=、注销自己-=”,

    并且他只能注册自己内部的方法到事件上,另外,外界也不能主动地触发一个事件,通常我们unity声明周期唤醒的时候注册事件,在OnDestroy的时候注销事件。

     1 public static class lesson_EventSysteam
     2 {
     3     public delegate void SendStrHandle(string str);//声明一个委托
     4     static public event SendStrHandle sendStr;//  (注册监听)      注册事件类型的委托
     5     static public void RaiseSendStr(string str)//(发起广播)  发起委托的函数
     6     {
     7         if (sendStr != null)
     8         {
     9             sendStr(str);
    10         }
    11     }
    12 }
     1 public class Lessontest : MonoBehaviour
     2 {
     3     void Start()
     4     {
     5         // lesson_EventSysteam.sendStr("haha");//外部调用委托
     6         lesson_EventSysteam.sendStr += someFunc;
     7     }
     8     void someFunc(string str)
     9     {
    10 
    11     }
    12 }

    解释一下为什么把event去掉,执行效果不变。那又为什么要增加一个事件的关键字?
    1.委托可以把一个方法作为参数代入另一个方法。
    2.委托是类型,事件是对象.
    3.其实事件是委托的一个修饰符,加了event(事件)修饰之后,委托就被限制了,假设这个加了修饰符的事件称为事件1,
    通过事件1我们可以更好地控制注册和注销,也就是对于一个外部类,他只能“注册自己+=、注销自己-=”,他只能注册自己内部的方法到事件上。
    另外,外界也不能主动地触发一个事件。事件只能add、remove自己,不能赋值。
    也就是说事件只能+=、-=,不能= 。事件内部就是一个private的委托和add

    总结:
    事件与委托最主要的区别应该是事件不能在外部调用,但可以通过+=或-=进行注册,但如果委托变量为私有,
    则外部不能注册;如果为公有,则外部又可以调用,破坏了封装,所以就定义一个event进行限制是最合适的.

  • 相关阅读:
    Vue中事件委托的使用
    java提取每个汉字的首字母
    想把大脑存进电脑,我为什么要写博客
    CF 1606 D题题解
    js前端 音频波形图像展示
    js前端 仪表盘实现
    js前端 bootstrap select的使用
    UOS系统维护命令
    linux 打印机管理常用命令
    linux 调用shell命令
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/6827936.html
Copyright © 2011-2022 走看看