C# 入门(10) 事件(event)
2017-05-04 10:44
330 查看
C#的事件
参考书籍: 《C#图解教程》事件这东西呢,其实就是观察者模式。事件在很多框架里面都有,例如Andriod,QT5(信号槽),Cocos2d-x,Unity3d,一般的GUI如按钮,编辑文本,等等都是用事件的原理来响应程序的。
发布者(publisher)和订阅者(subscriber)
发布者(publisher),发布某个事件的类或结构。订阅者(subscriber),注册在事件发生时得到通知的类或结构。
事件处理程序(event handler),订阅者收到通知时要执行的方法。
触发(raise)事件,就是发布通知(依次执行委托列表的方法)。
简单的说,如果我要实现点击一个按钮后,画布上就出现一张图片。那就是画布类(订阅者)有一个显示图片的方法(事件处理程序),把这个方法添加到按钮(发布者)的事件的委托里,当按钮被点击(触发事件),就执行事件里面的委托,这委托里面就会执行显示图片的方法。如下图。
namespace MyEvent { //发布者 class MyButton { //EventHandler是系统推荐的事件处理委托,也可以自己写。 public event EventHandler ButtonClickedEvent; public void OnButtonClicked() { //触发事件,第一个参数是触发事件的对象的引用,第二个参数是用来传你要的处理数据。 ButtonClickedEvent(this, null); } } //订阅者 class MyCanvas { private string Picture = "i am a picture!"; public MyCanvas(MyButton myBtn) { //订阅事件 myBtn.ButtonClickedEvent += ShowPicture; } //事件处理程序,签名要和委托的前面匹配。 void ShowPicture(object source,EventArgs e) { Console.WriteLine(Picture); } } class Program { static void Main() { MyButton myButton = new MyButton(); MyCanvas myCanvas = new MyCanvas(myButton); myButton.OnButtonClicked(); Console.ReadKey(); } } }
运行结果:i am a picture!
至于EventHandler这个系统的标准委托类型还有EventArgs传递数据类自己看书吧。《C#图解教程》P262。
事件访问器
类似与属性,事件访问器有两个,add(+=)和remove(-=),同样有个叫value的隐式参数。public event EventHandler Counted { add { ... //执行+=运算符代码 } remove { ... //执行-=运算符代码 } }
相关文章推荐
- javascript 入门经典--笔记10 -- event事件
- C#:代表(delegate)和事件(event) (转)
- C#:代表(delegate)和事件(event)
- C#:委托(delegate)和事件 (event)
- C#事件(event)解析
- C#事件(event)解析(转载)
- C#中委托,事件理解入门
- C#事件(event)解析
- C#编程利器之四:委托与事件(Delegate and event)
- C#编程利器之四:委托与事件(Delegate and event) (上)
- C#事件(event)解析
- C#事件(event)解析
- C#事件(event)解析
- C#事件(event)解析
- 用 C++ 实现 C# 中的 委托/事件 (2-delegate event functor)
- C# 实现事件(Event)演习代码
- 深入浅出C#2008从入门到提高Step By Step(五)Windows应用程序常用控件类(10)-TextBox
- C#事件(event)解析
- C#事件(event)解析 -- 新手必看
- C# 事件(event)分析