C#.NET -- 自定义事件
2010-05-13 16:07
176 查看
最近研究了一下C#.NET的委托与事件这些东西,通过园子多篇文章的学习,基本上有了一个了解,现将一些基本的事件研究代码贴出来,分享一下,也希望大家能够多多指点。
代码
推荐几篇写的比较好的文章,也是有关委托与事件的:
/article/5688331.html,系列篇,通俗易懂。
/article/7044658.html,这个是一个委托作为返回值和参数做的计算器。
代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class BaseOnEvent : System.Web.UI.Page { /* *事件:事件的本质就是一个委托链,在我们使用事件的时候,必须要声明对应的委托,而触发事件,其实就是在使用委托链。 *在执行某个事件时,先要看看有没有人订阅这个事件,没有人订阅的话,那就不用执行了(此时事件为null,执行会报错)。 */ //申明一个委托 public delegate void Publish(int state); //申明一个事件 public event Publish OnPublish; protected void Page_Load(object sender, EventArgs e) { //首先需要知道有哪些对象关注这个事件,以下是设置关注者列表,默认Eson与Aliy都对此事件比较关注 OnPublish += MrEson.GetLatestNews; OnPublish += MissAliy.GetLatestNews; //记住:事件必须要在方法中触发 Test(); } private void Test() { //首先处理该方法的一些逻辑 Response.Write("系统消息:hello,wrold!今天起,博客园正式开通啦!<br />");//发生第一个事件 //注意此处:事件分发是在该事件被订阅、被关注时,才被执行,如果该事件没有任何对象来关注,则不需要广播 //当然了,也可以在处理逻辑的中途广播给每个订阅者,以让每个关注者知道具体处理的进度或者状态等等 if (OnPublish != null) OnPublish(0); //紧接着事件发生了一些变化,需要将这些发生的变化通知到每个关注者那里去 Response.Write("<br /><br />系统消息:恭喜恭喜,博客园又出新功能了!<br />"); if (OnPublish != null) OnPublish(1); //又发生了新的变化,同样把变化的内容通知关注者 Response.Write("<br /><br />系统消息:从今日起,注册成为博客园会员,将会免费获得香港一日游的机会。<br />"); if (OnPublish != null) OnPublish(2); Response.Write("<br /><br />系统消息:还有哪些用户在关注本次事件的,吃饭去了。。。<br />"); OnPublish -= MissAliy.GetLatestNews;//在此取消订阅 if (OnPublish != null) OnPublish(1); } } public class MrEson { //由于Eson对技术比较感兴趣,所以他对博客园的消息一直都在关注 public static void GetLatestNews(int state) { if (state == 0) HttpContext.Current.Response.Write("知道了,博客园开通了。<br />"); else if (state==1) HttpContext.Current.Response.Write("哦,博客园又出新功能了,还可以在线聊天。<br />"); else if (state==2) HttpContext.Current.Response.Write("恩,博客园真是越来越好了,哈哈..<br />"); } } public class MissAliy { //Aliy就不一样了,他只关注那些大的新闻,小的新闻就直接不理 public static void GetLatestNews(int state) { if (state == 0) HttpContext.Current.Response.Write("我是Miss Aliy,呵呵,我的网站也马上上线了。<br />"); else if (state == 1) HttpContext.Current.Response.Write("恩,博客园还是挺不错的,不过跟我比起来还有点距离。<br />"); else if (state == 2) { //new BaseOnEvent().OnPublish -= MissAliy.GetLatestNews; //不能在这里取消订阅,要取消订阅只有在发生事件的方法体内取消,本次取消无效 HttpContext.Current.Response.Write("哎,没意思,我还是写我的代码吧....<br />"); } } }
推荐几篇写的比较好的文章,也是有关委托与事件的:
/article/5688331.html,系列篇,通俗易懂。
/article/7044658.html,这个是一个委托作为返回值和参数做的计算器。
相关文章推荐
- C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单
- (转)C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单
- .NET 中自定义事件的驱动(C#)
- asp.net中c#自定义事件的实现方法详解
- .NET/C#中对自定义对象集合进行自定义排序的方法
- C#自定义事件及用法实例
- paip.c#.net自定义图像窗体form
- [引]如何藉由使用 Visual C# . NET 處理 Word 中的事件
- 在asp.net(C#)中采用自定义标签和XML、XSL显示数据
- 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类
- 通过c# 实现自定义属性改变触发自定义事件 ,理解自定义事件及其触发过程
- NET 本质论 - 了解 C# foreach 的内部工作原理和使用 yield 的自定义迭代器
- C# winform中自定义用户控件 然后在页面中调用用户控件的事件
- 使用C# .net开发微信公众号之创建自定义菜单
- ASP.NET 用户控件自定义属性、方法、事件
- 使文件下载的自定义连接支持 FlashGet 的断点续传多线程链接下载! C#/ASP.Net 实现!
- asp.net C# config 自定义节点及自定义节点配置以独立文件存在
- HOW TO:使用 Visual C# .NET 在 ASP.NET 中创建自定义错误报告
- 在 Visual C# .NET 中处理 Windows 窗体中 Office XP 电子表格组件的事件