Unity3d通过Action注册事件,回调方法

http://blog.csdn.net/liulala16/article/details/8835012


using UnityEngine;


namespace Liulala.Project

{

    public class Data

    {

        public System.Action<intint> OnDateChange;


        public int Date1 { getprivate set; }

        public int Date2 { getprivate set; }


        public void SetData(int date)

        {

            Date1 = date;

            Date2 = _dateStart + date;

            PlayerPrefs.SetInt(NewDate, Date2);

            OnDateChange(Date1, Date2);

        }


        public Data()

        {

            Date2 = PlayerPrefs.GetInt(NewDate);

            _dateStart = Date2;

            Date1 = 0;


            OnDateChange += (date1, date2) => { };

        }


        private int _dateStart;

        

        private static readonly string NewDate = "Date2";

    }

}





using Liulala.Project;

using UnityEngine;


public class Game : MonoBehaviour

{

    

      private void Start()

          _Data = new Data();

          _Data.OnDateChange += ChangeView(); 

         }

        private void ChangeView()

        {

        }


 

        private Data _Data;


}


给c#添加SetTimeout和SetInterval函数(.NET Framework 3.5 System.Action命名空间)

http://blog.csdn.net/showrock/article/details/4648437


http://www.cnblogs.com/supers/articles/1120894.html

 

1.

Javascript中的SetTimeout和SetInterval函数很方便,把他们移植到c#中来。

调用示例:

 image

执行效果:

image

2.

实现代码:

 

 1           ///   <summary>
 2           ///  在指定时间过后执行指定的表达式
 3           ///   </summary>
 4           ///   <param name="interval"> 事件之间经过的时间(以毫秒为单位) </param>
 5           ///   <param name="action"> 要执行的表达式 </param>
 6           public   static   void  SetTimeout( double  interval, Action action)
 7          {
 8              System.Timers.Timer timer  =   new  System.Timers.Timer(interval);
 9              timer.Elapsed  +=   delegate ( object  sender, System.Timers.ElapsedEventArgs e)
10              {
11                  timer.Enabled  =   false ;
12                  action();
13              };
14              timer.Enabled  =   true ;
15          }
16           ///   <summary>
17           ///  在指定时间周期重复执行指定的表达式
18           ///   </summary>
19           ///   <param name="interval"> 事件之间经过的时间(以毫秒为单位) </param>
20           ///   <param name="action"> 要执行的表达式 </param>
21           public   static   void  SetInterval( double  interval, Action < ElapsedEventArgs >  action)
22          {
23              System.Timers.Timer timer  =   new  System.Timers.Timer(interval);
24              timer.Elapsed  +=   delegate ( object  sender, System.Timers.ElapsedEventArgs e)
25              {
26                  action(e);
27              };
28              timer.Enabled  =   true ;
29          }
30 

 

3.

由于System.Timers.Timer 是“基于服务器的 Timer 是为在多线程环境中用于辅助线程而设计的”,所以在winform中使用时如果要修改UI对象就要注意了,给个在winform中使用的例子:

 image

运行效果:

image

0
0

http://bbs.csdn.net/topics/390039314

下例展示了 Action 泛型委托中的逆变支持带来的益处。 AddToContacts 方法获取 Person 类型的参数。 但是,您可以将此方法指派给 Action<Employee> 委托(在 Visual Basic 中为 (Action(Of Employee)),因为 Employee 继承 Person。 

C# code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public  class  Person { }
public  class  Employee : Person { }
class  Program
{
     static  void  AddToContacts(Person person)
     {
         // This method adds a Person object
         // to a contact list.
     }
 
     static  void  Test()
     {
         // Create an instance of the delegate without using variance.
         Action<Person> addPersonToContacts = AddToContacts;
 
         // The Action delegate expects 
         // a method that has an Employee parameter,
         // but you can assign it a method that has a Person parameter
         // because Employee derives from Person.
         Action<Employee> addEmployeeToContacts = AddToContacts;
 
         // You can also assign a delegate 
         // that accepts a less derived parameter to a delegate 
         // that accepts a more derived parameter.
         addEmployeeToContacts = addPersonToContacts;
     }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值