C# 中的委托和事件是理解这门语言的一道坎,这回记一下。本文能多简略就多简略,如果被想真正学习这方面知识不小心被搜索到,请移步其他大神的博客。
委托
并没有脱离开事件写过委托,但是委托确实是可以不和事件一起用的。委托是针对方法的一种归类方式。
1 | public delegate void PlayDelegate(string name); |
类似于python中的函数名称作为参数传递,只不过更为标准化。
事件
不想搞得太复杂,直接上干货,经典的例子,烧水。
Heater类:
1 | public delegate void BoilHandler(object sender, BoilEventArgs e); |
以上的代码一般是在事件发出对象的内部写。使用public暴露事件。
Alarm类
1 | public void MakeAlert(object sender, EventArgs e) { |
program
1 | heater.BoilEvent += MakeAlert; |
实际上如果using system;
之后,可以用System命名空间下的EventHandler进行操作,看一下MSDN吧,比较详细。
总结
发送者做好委托和事件的设定,包装好参数,事件定义为public,外部暴露后将接收方法注册到事件上,参数与委托中定义的一致。