c#事件Unity与.Net对比

今天在看Unity3d的书,发现上面的调用事件比较特殊,比如说按钮事件

该方法写在OnGUI方法中if(GUILayout.Button("按钮1"))
{
  //执行事件的处理
}

这样看上去,貌似UnityEngine帮我们把事件改成在OnGUI事件中的让我们自己去监听我们自己创建的控件,想想又想不通,

为什么这样做,于是我便在Console中写了一个闹钟类,模拟了下闹钟的响铃事件,代码如下:

using Microsoft.VisualStudio.DebuggerVisualizers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UnitTest
{

    /// <summary>
    /// 事件参数类
    /// </summary>
    public class RingingEventArgs : EventArgs
    {
        public RingingEventArgs(DateTime dateTime)
        {
            Time = dateTime;
        }

        public readonly DateTime Time;
    }

    /// <summary>
    /// 闹钟类
    /// </summary>
    public class Alarm
    {
        //设定的事件列表
        private  List<DateTime> List=new List<DateTime>();

        //增加闹钟的构造函数
        public void Add(DateTime dateTime)
        {
            this.List.Add(dateTime);
        }

        //委托
        public delegate void AlarmHandler(object sender, RingingEventArgs e);

        //事件
        public event AlarmHandler Ringing;

        /// <summary>
        /// 调用事件的方法
        /// </summary>
        /// <param name="eventArgs"></param>
        protected virtual void OnRinging(RingingEventArgs eventArgs)
        {
            if (Ringing!=null)
            {
                Ringing(this, eventArgs);
            }
        }

        /// <summary>
        /// 闹钟监测方法
        /// </summary>
        public void CheckAlarm()
        {
            while (true)
            {
                foreach (DateTime dateTime in List)
                {
                    if (dateTime.ToString("yyyy-MM-dd hh:mm") == DateTime.Now.ToString("yyyy-MM-dd hh:mm"))
                    {
                        OnRinging(new RingingEventArgs(DateTime.Now));
                    }
                }
            }
        }
    }
}
       //调用检测闹钟方法,触发事件       static void Main(string[] args)
        {
            Alarm alarm=new Alarm();
            alarm.Add(DateTime.Parse("2014-8-8 16:28"));
            alarm.Ringing+=alarm_Ringing;
            alarm.CheckAlarm();
        }

        private static void alarm_Ringing(object sender, RingingEventArgs e)
        {
            Console.WriteLine("启用闹钟"+e.Time.ToShortTimeString());
            Console.ReadLine();
        }

从c#角度事件应该是委托来着,到了UnityEngine中这种方式挺不习惯

c#事件Unity与.Net对比

时间: 2024-10-26 17:45:31

c#事件Unity与.Net对比的相关文章

9 WPF之深入浅出话事件

转:http://blog.csdn.net/fwj380891124/article/details/8139260 就像属性系统在WPF中得到了升级.进化为依赖属性一样,事件系统在WPF也得到了升级.进化成为了路由事件(Routed Event),并在其基础上衍生出命令传递机制.这些机制在很大程度上减少了对程序员的束缚,让程序的设计和实现更加的灵活,模块之间的耦合度也进一步降低,这一章我们一起来领略一下新消息机制的风采. 8.1 近观WPF的树形结构 路由一词的意思大概是这样:起点和终点间有

解决Outlook&ldquo;无法打开默认电子邮件文件夹&ldquo;错误,事件ID9646

1. 问题描述: 两个公共邮箱,分别由多人同时配置Exchange模式使用,部分人员正常配置使用,其他人员配置完Outlook后,打开出现如下错误: 出现错误的人员在同环境下配置POP模式可以正常使用. 2. 查找原因: 1) Outlook客户端配置Exchange模式成功,说明邮箱用户访问Exchange前端CAS服务器没有问题.由错误提示看出当前配置文件无法连接到邮箱,问题可能出现在用户邮箱所在的后端Mailbox服务器. 2) 分别登陆上挂载A和B所在数据库的邮箱服务器,查看事件查看器日

JQuery中的事件以及动画

嘿嘿,今天学习了JQuery的事件以及动画,感觉即将学习完JQuery,在回忆起上周学习的JavaScript,感觉好多刚刚学习的知识点都记得模 糊啦,这个是很让失望的,这里只说明了一点,课是听过啦,但是没有好好的练习,于是就加快了刚学习的知识的遗忘力度.在一周的时间里学习了JavaScript, 那时间没感觉可得节奏很快,现在顿时发现课真的是快啦,我需要认真的对待,好好的在练习练习,而写发现最近的态度也有很大的问题,总是在赶今天学习的任 务,发现没有更多的时间去复习前面学习的知识,感觉还是有点

JavaScript事件在WebKit中的处理流程研究

本文主要探讨了JavaScript事件在WebKit中的注册和触发机制. JS事件有两种注册方式: 通过DOM节点的属性添加或者通过node.addEventListener()函数注册: 通过DOM节点的属性添加如下所示,节点的属性采用on后面紧接event name的形式,比如onclick, onload; <html> <head> <script type="text/javascript"> function listener(e){ a

深入浅出WPF——附加事件(Attached Event)

3.3 事件也附加——深入浅出附加事件 WPF事件系统中还有一种事件被称为附加事件(Attached Event),简言之,它就是路由事件.“那为什么还要起个新名字呢?”你可能会问. “身无彩凤双飞翼,心有灵犀一点通”,这就是对附加事件宿主的真实写照.怎么解释呢?让我们看看都有哪些类拥有附加事件: Binding类:SourceUpdated事件,TargetUpdated事件 Mouse类:MouseEnter事件.MouseLeave事件.MouseDown事件.MouseUp事件,等等 K

CandyCrush 糖果传奇小游戏总结

1.unity自带触发事件 unity的每一个Collider对象都有类似OnMouseDown.OnMouseOver等事件.此事件是存在于MonoBehaviour脚本里的,而MonoBehaviour是每个脚本的基类,根据手册可知有这些事件(鼠标在GUIElement(GUI元素)或Collider(碰撞体)上点击时调用OnMouseDown),是触发器也行! 2.销毁对象 为了不占用系统资源或者为了避免造成内存泄漏,所以当我们销毁一个对象的时候,我们要对此对象引用的东西进行处理! 对此对

unity3d脚本编程

一 创建和使用脚本 1 概述 GameObject的行为都是被附加到其上面的组件控制,脚本本质上也是一个组件. 在unity中创建一个脚本,默认内容例如以下: using UnityEngine; using System.Collections; public class MainPlayer : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame

node基础 --全局

全局对象: global:永远使用var 定义变量以避免引入全局变量; process:所有全局执行上下文的内容都在process对象中: 模块系统:三个全局变量 require():如果模块不是在node_modules中,那么必须使用相对路径导入: exports:可以在这个对象上定义一些属性,以这个对象为模块暴露的API: module:exports就是module.exports,可以将exports完全重写,换一个暴露的API; 监听事件:EventEmitter: 对比window

javascript你应该知道的七件事

Javascript发展到今天,很高兴看到她的成功.曾经好多人都这么说:写程序这么多年,现在最看不懂的程序是javascript!javascript虽然是一种弱类型语言,但是她却有着"高贵"的理论.下面是学习javascript过程中的一些小激动时刻,记录下来,大家可以跟我一起感受. 缩略标记 在创建对象和数组的过程中可以使用缩略标记.过去,我们需要创建一个对象时,我们会这样写: var car =new Object(); car.colour ='red'; car.wheels