经过查阅资料和自己的理解整理出来的,欢迎大家指教。
delegate和event
- 何时使用:
- 异步的时候,比如加载完成通知。
- 需要回调的时候,比如按钮点击、动画播放结束等。
- 发送事件通知的时候。 比如,功能触发。
- 使用观察者模式的时候。比如,2个类之间的交互。
- 2者的区别:
- event其实是对delegate的扩展。
- event在interfacea里使用直接定义属性,delegate在interfacea里使用要用get、set方式。
- event是private的访问级别,delegate是public的访问级别。
- event只能使用+=、-=的方式赋值,delegate确可以使用=、+=、-=的方式赋值。
总结:
event和delegate最大的区别是:event增加了封装性,让delegate完全由自己控制,更好的实现了高内聚。
例子:
1 using UnityEngine; 2 using System.Collections; 3 4 class DelegateMain 5 { 6 public delegate void CompareDelegate(); 7 public CompareDelegate compareDelegate; 8 public event CompareDelegate eventDelegate; 9 10 public void RunEventDelegate() 11 { 12 if (eventDelegate == null) return; 13 eventDelegate.Invoke(); 14 } 15 } 16 17 public class DelegateStudy : MonoBehaviour { 18 19 // Use this for initialization 20 void Start () 21 { 22 DelegateMain d = new DelegateMain(); 23 d.compareDelegate = Compare; 24 d.compareDelegate += new DelegateMain.CompareDelegate(delegateTest); 25 d.compareDelegate.Invoke(); 26 27 d.eventDelegate += eventDele; 28 d.eventDelegate += new DelegateMain.CompareDelegate(eventDelegateTest); 29 d.RunEventDelegate(); 30 } 31 32 void eventDelegateTest() 33 { 34 Debug.Log("event delegate Test2"); 35 } 36 37 void eventDele() 38 { 39 Debug.Log("event delegate Test1"); 40 } 41 42 void delegateTest() 43 { 44 Debug.Log("delegate delegate Test2"); 45 } 46 47 void Compare() 48 { 49 Debug.Log("delegate delegate Test1"); 50 } 51 52 }