经过查阅资料和自己的理解整理出来的,欢迎大家指教。


delegate和event

  • 何时使用:
    • 异步的时候,比如加载完成通知。
    • 需要回调的时候,比如按钮点击、动画播放结束等。
    • 发送事件通知的时候。 比如,功能触发。
    • 使用观察者模式的时候。比如,2个类之间的交互。
  • 2者的区别:
    • event其实是对delegate的扩展。
    • event在interfacea里使用直接定义属性,delegate在interfacea里使用要用get、set方式。
    • event是private的访问级别,delegate是public的访问级别。
    • event只能使用+=、-=的方式赋值,delegate确可以使用=、+=、-=的方式赋值。

总结:
event和delegate最大的区别是:event增加了封装性,让delegate完全由自己控制,更好的实现了高内聚。


例子:

 using UnityEngine;
using System.Collections; class DelegateMain
{
public delegate void CompareDelegate();
public CompareDelegate compareDelegate;
public event CompareDelegate eventDelegate; public void RunEventDelegate()
{
if (eventDelegate == null) return;
eventDelegate.Invoke();
}
} public class DelegateStudy : MonoBehaviour { // Use this for initialization
void Start ()
{
DelegateMain d = new DelegateMain();
d.compareDelegate = Compare;
d.compareDelegate += new DelegateMain.CompareDelegate(delegateTest);
d.compareDelegate.Invoke(); d.eventDelegate += eventDele;
d.eventDelegate += new DelegateMain.CompareDelegate(eventDelegateTest);
d.RunEventDelegate();
} void eventDelegateTest()
{
Debug.Log("event delegate Test2");
} void eventDele()
{
Debug.Log("event delegate Test1");
} void delegateTest()
{
Debug.Log("delegate delegate Test2");
} void Compare()
{
Debug.Log("delegate delegate Test1");
} }

delegate和event的更多相关文章

  1. 浅谈c#中的delegate和event了

    一.开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那.好了,那就趁着阳光明媚的早晨简单来谈谈delegate和ev ...

  2. 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏  ...

  3. .NET 中易混淆的概念(Delegate vs Event)

    事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件.所谓事件就是 由某个对象发出的消息.比如用户按下了某个按钮,某个文件 ...

  4. 观察者模式与.NET的delegate、event机制

    1.引言 最近在写一些程序玩的时候,接触到了delegate(委托)和event(事件),网上查找了很多的资料,有些博文说可以把delegate近似当做C++当中的函数指针来看,由于自己本身对C++的 ...

  5. [转] C#中的delegate 和 event

    转至:here 终于会用c#中的delegate(委托) 作者:qq826364410 引言 Delegate是Dotnet1.0的时候已经存在的特性了,但由于在实际工作中一直没有机会使用Delega ...

  6. C#: Delegate and Event

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. delegate 和 event

    delegate 和 event 观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, ...

  8. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...

  9. C#中Delegate和Event以及它们的区别(转载)

    一.Delegate委托可以理解为一个方法签名. 可以将方法作为另外一个方法的参数带入其中进行运算.在C#中我们有三种方式去创建委托,分别如下: public delegate void Print( ...

随机推荐

  1. DM8168 解码显示模块代码阅读分析

    解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...

  2. OSI/RM网络7层体系

    转自OSI/RM网络7层体系 1 物理层 这是整个OSI参考模型的最低层,它的任务就是提供网络的物理连接.所以,物理层是建立在物理介质上(而不是逻辑上的协议和会话),它提供的是机械和电气接口.主要包括 ...

  3. PYTHON连MS SQL示例

    先要设置WINDOWS的系统DSN的.然后才可以哟. import pyodbc conxn = pyodbc.connect('DSN=BBB; DATABASE=Northwind;UID=AAA ...

  4. 【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3940  Solved: 1736 Description ...

  5. Winform的多线程问题

    http://blog.csdn.net/Maths_bai/article/details/6000744

  6. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-005-Bean的作用域@Scope、ProxyMode

    一. Spring的bean默认是单例的 But sometimes you may find yourself working with a mutable class that does main ...

  7. ANDROID_MARS学习笔记_S04_001_OAUTH获取request_token

    一.代码 1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  8. duilib入门简明教程 -- VS环境配置(2) Alberl

      既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错误,以及路径配置错误等等,还有人不知道SVN,然后一个个文件手动下载的.     其实吧,duilib的 ...

  9. 《鸟哥的Linux私房菜》读书笔记二

    1.Unix的前身是由贝尔实验室(Bell lab.)的Ken Thompson利用汇编语言写成的, 后来在1971-1973年间由Dennis Ritchie以C程序语言进行改写,才称为Unix. ...

  10. minicom-2.4安装配置

    minicom-2.4安装说明 1.#tar –zxvf minicom-2.4.tar.gz 解压开有连个文件,minicom-2[1].4.tar.gz  和minirc.dfl rpm包方式# ...