C#事件学习
2017-12-17 15:41
162 查看
C#事件
事件的作用
事件是.Net中最常用的OOP技术之一。事件可以提供一个实现这样一个功能:当事件被触发的时候,依次执行订阅了该事件的代码。单个事件可以供多个处理程序订阅。定义和订阅事件
事件的基础是委托。每一个事件都有自己的返回类型和参数,由声明事件时所指定的委托类型确定。例如:using System; using System.Collections.Generic; public delegate void MessageHandler(string messageText);//定义一个委托 public class Connection { public event MessageHandler MessageArrived//定义一个事件 }
接下来我们可以创建一个方法,返回值和参数与我们上面定义的事件相同。
public class Display { public void DisplayMessage(string message) => WriteLine($"Message arrived: {message}"); }
定义完方法后,我们就可以在主函数或其他地方订阅事件。
class Program { static void Main(string[] args) { myConnection.MessageArrived += new MessageHandler(myDisplay.DisplayMessage); } }
触发事件
接下来,我们需要触发事件来让事件执行订阅了它的方法。//判断是否有方法订阅了该事件 if (MessageArrived != null) { MessageArrived("Hello Mami!");//触发 }
泛型EventHandler<T>
EventHandler<T>是泛型委托类型,它的原型定义如下public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); }
第一个参数为引发事件的对象的引用,第二个参数为由事件传送的参数,这个参数只要是派生自System.EventArgs即可。
下面是一个例子:
//事件的参数 public class MessageArrivedEventArgs : EventArgs { private string message; public string Message { get { return message; } } public MessageArrivedEventArgs() { message = "No message sent."; } public MessageArrivedEventArgs(string newMessage) { message = newMessage; } } //要订阅事件的方法 public class Display { public void DisplayMessage(object source, MessageArrivedEventArgs e) { WriteLine($"Message arrived from: {((Connection)source).Name}"); WriteLine($"Message Text: {e.Message}"); } } static void Main(string[] args) { public event EventHandler<MessageArrivedEventArgs> MessageArrived; MessageArrived += myDisplay.DisplayMessage;//订阅事件 }
相关文章推荐
- C#事件-事件学习好例子
- head first C#学习笔记:如何创建事件以及事件处理程序
- c#中的委托和事件详细学习【分6页学习】
- C#学习笔记之二:事件
- C#学习基本概念之事件与关键字--event
- 我是如何学习设计模式的一:.NET C# 委托定天下,学好委托事件,设计模式精髓可以理解三分之一,怎么说也是三分天下之势了
- C#学习笔记(三)—–C#高级特性中的委托与事件(下)
- c#事件 学习记录
- C# 委托 事件 学习 以及 小DEMO
- 学习笔记之---C#中的委托与事件
- C#事件(Event)学习日记
- C#事件的知识,转载学习
- C#学习笔记 委托和事件
- C#事件-事件学习好例子
- C#学习笔记19-委托和事件
- C#学习之事件
- [学习]C#里的委托和事件实现Observer
- Unity3D 学习 - 通过C#脚本创建简单的按钮、响应事件
- C#学习笔记——常量、字段以及事件
- C#事件机制学习