• 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中这种方式挺不习惯

  • 相关阅读:
    使用find命令删除文件的4种方式
    练习题: tail -f/-F & tr命令的使用原理&如何卸载软件& 批量新增用户并设置密码
    vim异常问题说明及工作原理
    系统阶段回顾部门-编辑命令使用技巧-vim
    系统优化操作部分-yum下载源优化
    系统目录结构部分-环境变量和别名配置文件
    E. OpenStreetMap(单调队列)
    E. OpenStreetMap(单调队列)
    线性基
    线性基
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3899783.html
Copyright © 2020-2023  润新知