WP7-C#实现Observer观察者模式

本文介绍使用C#实现观察者模式的方法。通过定义委托和事件,创建主体类和观察者响应逻辑,演示如何在达到特定条件时通知观察者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.bianceng.cn/Programming/csharp/201103/25254.htm

namespace Observer
{
//定义一个委托,这里定义了观察者方法的签名,就是一个协议吧
public delegate void NumberEventHandler(object sender,NumberEventArgs e);
//要传递哪些参数到观察者?在这里定义,注意,要继承自EventArgs
public class NumberEventArgs : EventArgs
{
 public NumberEventArgs(int number)
 {
 _number = number;
 }
 private int _number;
 public int Number
 {
 get { return _number; }
 set { _number = value; }
 }
}
//观察者模式中的主题
public class Subject
{
 //定义一个事件,就是委托的实例了
public event NumberEventHandler NumberReached;
public void DoWithLoop(int number)
{
  for (int i = 0; i <= 100; i++)
  {
  //触发事件的条件到了
  if (i == number)
  {
   NumberEventArgs e = new NumberEventArgs(i);
   OnNumberReached(e);
  }
  }
}
//注意,这个方法定义为保护的,虚拟的,代表子类还可以进行覆盖,改变触发事件的行 为
//甚至可以不触发事件 protected virtual void OnNumberReached(NumberEventArgs e)
{
 //判断事件是否为null,也就是是否绑定了方法
 if (NumberReached != null) NumberReached(this, e);
}
}
public class MainProgram
{
public static void Main()
{
 Console.WriteLine("Please Input a 0-100 Number:");
 int input = Console.Read();
 if (input < 0 || input > 100) { Console.WriteLine("Error"); }
 Subject s = new Subject();
 //给事件绑定方法,静态的
 s.NumberReached += new NumberEventHandler(msgbox_NumberReached);
 MainProgram mp = new MainProgram();
 //给事件绑定方法,实例方法
 s.NumberReached += new NumberEventHandler(mp.console_NumberReached);
 s.DoWithLoop(input); Console.Read();
}
 void console_NumberReached(object sender, NumberEventArgs e)
 {
 Console.WriteLine(e.Number.ToString());
 }
 static void msgbox_NumberReached(object sender, NumberEventArgs e)
 { 
 MessageBox.Show(e.Number.ToString());
 }
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值