C#.NET -- 自定义事件

  最近研究了一下C#.NET的委托与事件这些东西,通过园子多篇文章的学习,基本上有了一个了解,现将一些基本的事件研究代码贴出来,分享一下,也希望大家能够多多指点。

 

代码
   
     
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 /> " );
}
}
}

 

推荐几篇写的比较好的文章,也是有关委托与事件的:

http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html,系列篇,通俗易懂。

http://www.cnblogs.com/markhe/archive/2009/08/26/1554710.html,这个是一个委托作为返回值和参数做的计算器。

 

你可能感兴趣的:(.net)