事件对委托的限制体现
区别:
1.委托可以把一个方法作为参数代入另一个方法。
2.委托是类型,事件是对象。
3.事件是委托的一个修饰符,加了event(事件)修饰之后,委托就被限制了。
总结:
事件与委托最主要的区别是事件不能在外部调用,但可以通过+=或-=进行注册,他只能注册自己内部的方法到事件上。
另外,外界也不能主动地触发一个事件。事件只能add、remove自己,不能赋值。
如果委托变量为私有,则外部不能注册;如果为公有,则外部又可以调用,破坏了封装,所以就定义一个event进行限制是最合适的.
委托和事件就相当于字段和属性
1 using UnityEngine; 2 using System.Collections; 3 4 public delegate void DelegateEventHandler(); 5 6 public class Test : MonoBehaviour { 7 8 //不用event对委托进行限制 9 public DelegateEventHandler OnMyDelegate; 10 11 //使用event对委托进行限制 12 public static event DelegateEventHandler OnDelegate; 13 14 void Start () { 15 new MyClass(); 16 OnDelegate(); 17 } 18 } 19 20 public class MyClass { 21 22 public MyClass() { 23 //这种情况就会报错 24 Test test = new Test(); 25 test.OnMyDelegate(); 26 27 //破坏封装 28 test.OnMyDelegate = B; 29 test.OnMyDelegate(); 30 31 //正确使用方法 32 Test.OnDelegate += B; 33 } 34 35 void B() { 36 Debug.Log("回调方法"); 37 } 38 }