首页 / C# / 使用C#的自定义事件
使用C#的自定义事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用C#的自定义事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2507字,纯文字阅读大概需要4分钟。
内容图文
![使用C#的自定义事件](/upload/InfoBanner/zyjiaocheng/1217/09e2d18d8b2044aaae8a1a577632e33a.jpg)
public class CarDealer { public Action<string> NewCarInfo; //使用系统定义的泛型委托publicvoid NewCarComing(string car) { Console.WriteLine("CarDealer, new car {0} has come.", car); if (NewCarInfo != null) NewCarInfo(car); } }
先插入一段代码,这个例子的 Action<string> 表示只有一个 string 参数,如果有一组的参数的话,代码写起来会比较难看。
.Net 给我们提供了基于 EventArgs 来进行传参 的 自定义事件 EventHandler。
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
可以 EventHandler 理解为“发布者提供的订阅器”,"sender" 表示发布者,“e” 表示发布者推送给订阅者的参数信息。
而 EventArgs 则是 发布者 与 订阅者 间约定好的订阅信息。
来看完整的例子:
class Program { public class MyEventArg : EventArgs { public string name { get; set; } public MyEventArg(string carname) { name = carname; } } publicclass CarDealer { publicevent EventHandler<MyEventArg> NewCarInfo; publicvoid NewCarComing(string carname) { Console.WriteLine("CarDealer, new car {0} has come.", carname); if (NewCarInfo != null) NewCarInfo(this, new MyEventArg(carname)); } } publicclass Consumer { privatestring name; public Consumer(string name) { this.name = name; } publicvoid NewCarIsHere(object sender, MyEventArg e) { Console.WriteLine("{0}, car {1} is new", name, e.name); } } staticvoid Main(string[] args) { var dealer = new CarDealer(); var personA = new Consumer("personA"); dealer.NewCarInfo += personA.NewCarIsHere; dealer.NewCarComing("Ferrari"); var personB = new Consumer("personB"); dealer.NewCarInfo += personB.NewCarIsHere; dealer.NewCarComing("BMW"); Console.ReadLine(); } }
个人不喜用“发布-订阅”模式来阐述,更偏向于用“通知-反馈”模式的流程 可加以总结了:
1. 定义一种事件或委托,同时约定好通知者要给反馈者的参数;
public class MyEventArg : EventArgs { public string name { get; set; } public MyEventArg(string carname) { name = carname; } } publicclass CarDealer { publicevent EventHandler<MyEventArg> NewCarInfo; publicvoid NewCarComing(string carname) { Console.WriteLine("CarDealer, new car {0} has come.", carname); if (NewCarInfo != null) NewCarInfo(this, new MyEventArg(carname)); } }
2. 发布者提供事件通道 接受 反馈者按约定生成的反馈行为;
public class Consumer { private string name; public Consumer(string name) { this.name = name; } publicvoid NewCarIsHere(object sender, MyEventArg e) { Console.WriteLine("{0}, car {1} is new", name, e.name); } }
var dealer = new CarDealer(); var personA = new Consumer("personA"); dealer.NewCarInfo += personA.NewCarIsHere; var personB = new Consumer("personB"); dealer.NewCarInfo += personB.NewCarIsHere;
3. 通知者发出通知,反馈者收到通知并做出反馈行为;
dealer.NewCarComing("Ferrari"); dealer.NewCarComing("BMW");
原文:http://www.cnblogs.com/Daniel-Liang/p/5756118.html
内容总结
以上是互联网集市为您收集整理的使用C#的自定义事件全部内容,希望文章能够帮你解决使用C#的自定义事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。