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


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. (00)Java编程思想开篇立言。

    从今天开始,在相当长的时间中我在看Java编程思想.也把这个博客作为开始.这就是一个读书的笔记.

  2. 把内表 itab1 的 n1 到 n2 行内容附加到 itab2 内表中去.

    语法:append lines of itab1 [ from n1 ] [ to n2 ] to itab2. DATA:BEGIN OF gt_00 OCCURS 0,        l_01   ...

  3. CF_Lucky Sum

    幸运数字的定义是这样:仅含4和7且不比n小的数为n的幸运数字. 输入范围l,r要求输出这个范围内的数字的幸运数字之和. 代码: #include<stdio.h> #define N 10 ...

  4. 李洪强iOS开发之-环信02.3_具体接口讲解 - Apple Docs

    http://www.easemob.com/apidoc/ios/chat3.0/annotated.html Apple Docs.

  5. Learning WCF Chapter1 Hosting a Service in IIS

    How messages reach a service endpoint is a matter of protocols and hosting. IIS can host services ov ...

  6. Android 写文件到手机

    1)// 在手机中创建文件 FileOutputStream phone_outStream =this.openFileOutput("1.txt", Context.MODE_ ...

  7. 一起啃PRML - 1.1 Example: Polynomial Curve Fitting 多项式曲线拟合

    一起啃PRML - 1.1 Example: Polynomial Curve Fitting @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 前言: ...

  8. 转自 x_x_的百度空间 搞ACM的你伤不起

    来源:http://roba.rushcj.com/?p=548 劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!! ...

  9. 【转】在Ubuntu上下载、编译和安装Android最新源代码

    原文网址:http://blog.csdn.net/luoshengyang/article/details/6559955 看完了前面说的几本书之后,对Linux Kernel和Android有一定 ...

  10. 将批量下载的博客导入到手机后,通过豆约翰博客阅读器APP(Android手机)进行浏览,白字黑底,保护眼睛,图文并茂。

    首先下面演示的博文来自于以下地址:http://www.douban.com/note/423939291/ 需要先通过博客备份专家将导出的博文导入到手机(还不会用的朋友请先阅读http://www. ...