.NET Event和Delegate
2016年4月23日ASP.NET Standard
这里说的Event和Delegate指声明类型为相应delegate协议实例变量
1 2 3 4 | public delegate string TestDelegate(string msg, int no_one, int no_two);//我称之为协议 public event TestDelegate id_event;//Event实例变量 public TestDelegate id;//Delegate实例变量 |
Event和Delegate的联系:Event是封装过的Delegate
Event和Delegate的区别:
Event本身是私有的委托变量加上两个公共方法,从而避免直接在定义Event的类的外部进行调用,也避免了方法的覆盖(只能通过+=和-=来增加和删除)
Delegate变量可以直接在外部类进行调用,且只能附加一个委托方法,也就是会被覆盖。
它们均可以使用以下方法进行方法添加:
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 | /// <summary> /// 方法样例 /// </summary> private string implementDelegate(string msg, int no_one, int no_two) { return string.Format(@"{0}:{1} * {2} = {3}", msg, no_one, no_two, no_one * no_two); } private void test() { //直接附加 id_event += implementDelegate; //创建委托 id_event += new TestDelegate(implementDelegate); //附加匿名委托 id_event += delegate (string msg, int no_one, int no_two) { return "Delegate Success"; }; //Lamda表达式附加,本质为匿名委托,写法不同 id_event += (string msg, int no_one, int no_two) => { return "Lamda Success"; }; } |
发表评论或回复