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


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. SEVERE: Error listenerStart

    转载:http://blog.sina.com.cn/s/blog_43eb83b90102e2k6.html# 今天启动Tomcat启动不了,报以下错:org.apache.catalina.cor ...

  2. Discuz帖子列表页无法ajax加载下一页问题

    上周末抽空重构了一下JX3PVE的PVE栏目,只上线了宏库栏目,结果出了一堆Bug.奈何公司这段时间都在搞完美假期这专题,太忙也没去处理.这不是周末拿时间来看一下. 发现其中有一个是点“下一页”aja ...

  3. JQuery replace 替换全部

    天在做写个程序时遇到需要替换的功能,可是一开始用jquery的replace时,发现只替换到第一个.最后没办法,只好用正则表达式来例如下面   re = new RegExp("{thisc ...

  4. the apply of backbone

    http://www.developer.com/print/lang/jscript/creating-a-javascript-driven-online-notebook-with-backbo ...

  5. OneAlert 入门(二)——事件分析

    OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.有了 OneAlert,你可以更快更合理地为事件划分 ...

  6. Chapter 32:动态规划一 总结

    今天做了四道dp题,分数306. 就从我的做题顺序开始讲.. 首先是第四题,明显的记录模数DP,很快打出来了. 后来做完之后回来拍第四题,也没有什么问题,就AC了. 然后是第三题,我的性子真是太急了, ...

  7. Mozilla研究—深入理解mozilla所需的背景知识

    mozilla是一个以浏览器为中心的软件平台,它在我们平台中占有重要地位.我们用它来实现WEB浏览器.WAP浏览器.邮件系统.电子书和帮助阅读器等应用程序.为此,我最近花了不少时间去阅读mozilla ...

  8. reviewboard搭建

    reviewboard的搭建 系统:fedora 19 内核版本:3.9.5-301.fc19.x86_64 步骤 命令 备注 安装mysql # yum -y install mysql mysql ...

  9. jQueryEasyUI中DataGrid的height,width,fit,fitColumns属性

    height: 600, //不指定则默认垂直包裹,指定了则固定 width:1200,//不指定则水平100%平铺,指定了则固定 fit:false,//true:高度填充父窗体,忽略height属 ...

  10. linux ERROR: ld.so: object '/lib/libcwait.so' from /etc/ld.so.preload cannot be preloaded: ignored.

    [root@ora9i 3238244]# lsb_release -a LSB Version:    :core-3.0-amd64:core-3.0-ia32:core-3.0-noarch:g ...