`
izuoyan
  • 浏览: 9221211 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C#委托和事件,ObServer模式实例代码

阅读更多

一 ObServer模式:
定义对象间的一对多关系,当监视对象(Subject)发生改变后,依赖他的对象会自动告知和更新。

public partial class Heater : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{
HeaterBoil heater = new HeaterBoil();
Alarm alram = new Alarm();
Display display = new Display();

heater.BoilEvent+=new HeaterBoil.BoilHandler(alram.MakeAlert);
heater.BoilEvent += new HeaterBoil.BoilHandler(display.ShowMsg);

heater.BoilWater();
}

//热水器
public class HeaterBoil
{
private int temperature;//水温

public delegate void BoilHandler(int param);//定义委托
public event BoilHandler BoilEvent;//定义事件

//烧水
public void BoilWater()
{
for (int i = 0; i <= 100; i++)
{
temperature = i;

if (temperature > 95)
{
if (BoilEvent != null)
{
BoilEvent(temperature);
}
}
}
}
}

//报警器
public class Alarm:System.Web.UI.Page
{
//发出语音警报
public void MakeAlert(int param)
{
System.Web.HttpContext.Current.Response.Write(string.Format("Alarm:嘀嘀嘀,水已经{0}度了<br>", param));
}
}

// 显示器
public class Display : System.Web.UI.Page
{
//显示水温
public void ShowMsg(int param)
{
System.Web.HttpContext.Current.Response.Write(string.Format("Display:谁快开了,当前温度{0}度。<br>", param));
}
}
}

二 Event事件代码

public partial class EventTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
LowCharge+=new LowChargeEventHandler(Test);

LowChargeEventArgs eventTest=new LowChargeEventArgs();
eventTest.Str = "100";

OnLowCharge(eventTest);
}

//定义事件数据类
public class LowChargeEventArgs : EventArgs
{
private string str;

public string Str
{
get { return str; }
set { str = value; }
}
}

//定义事件委托
public delegate void LowChargeEventHandler(object sender, LowChargeEventArgs e);

//定义事件成员
public event LowChargeEventHandler LowCharge;

//调用事件委托
protected virtual void OnLowCharge(LowChargeEventArgs e)
{
if (LowCharge != null)
{
LowCharge(this, e);
}
}

//方法
public void Test(object sender, LowChargeEventArgs e)
{
Response.Write("Test By Event------"+e.Str.ToString());
}
}

三 委托实现代码和几种调用方式实现

public partial class DelegateTest_2 : System.Web.UI.Page
{
//定义委托
public delegate void testDelegate(string para);

protected void Page_Load(object sender, EventArgs e)
{
GetMethod("中国",ResponseA);
GetMethod("俄罗斯", ResponseB);

MethodTest test = new MethodTest();
GetMethod("中国", test.ResponseA);
GetMethod("俄罗斯", test.ResponseB);

testDelegate test2 = new testDelegate(ResponseA);
test2 += ResponseB;

GetMethod("ZZ", test2);

test2 -= ResponseA;
GetMethod("TT", test2);

//使用管理类
GetMethodManager manager = new GetMethodManager();
manager.GetMethod("A",ResponseA);

manager.GetMethod("B", ResponseB);

testDelegate test3 = new testDelegate(ResponseA);
test3 += ResponseB;

manager.GetMethod("T", test3);

manager.MakeDelete+=new testDelegate(ResponseA);
manager.MakeDelete+=new testDelegate(ResponseB);
manager.GetMethod("QQ");
}

protected void GetMethod(string para,testDelegate methodTest)
{
methodTest(para);
}

//封装上面的GetMethod方法为一个类
public class GetMethodManager
{
public event testDelegate MakeDelete;
public void GetMethod(string para, testDelegate methodTest)
{
methodTest(para);
}

public void GetMethod(string para)
{
MakeDelete(para);
}
}

public void ResponseA(string para)
{
Response.Write(para + "---A---");
}

public void ResponseB(string para)
{
Response.Write(para + "---B---");
}

public class MethodTest:System.Web.UI.Page
{
public void ResponseA(string para)
{
System.Web.HttpContext.Current.Response.Write(para + "---A---");
}

public void ResponseB(string para)
{
System.Web.HttpContext.Current.Response.Write(para + "---B---");
}
}
}

分享到:
评论

相关推荐

    C#中的委托、事件和Observer设计模式使用方法示例

    在C#编程语言中,委托、事件和Observer设计模式是构建高效、可扩展的应用程序的重要概念。这篇文档将深入探讨这些主题,以帮助你更好地理解它们的用途和实现方式。 首先,我们来看委托(Delegate)。委托在C#中相当...

    委托、事件与Observer设计模式

    委托、事件和Observer设计模式是面向对象编程中的关键概念,特别是在C#中有着广泛的应用。本文将深入探讨这三个概念,并通过实例帮助初学者理解和掌握它们。 首先,让我们从委托(Delegate)开始。委托在C#中可以被...

    c#中的委托与事件把委托事件讲透 读书笔记 学习心得

    C#中的委托与事件讲透读书笔记学习心得 ...委托和事件是C#中两个非常重要的概念,它们使得我们的代码更加灵活和可扩展。通过本文,我们学习了委托和事件的基本概念、它们的关系、以及它们在Observer设计模式中的应用。

    c#中的委托和事件的简单实例

    本篇文章将深入探讨C#中的委托和事件,并通过一个简单的实例来阐述它们的工作原理。 **一、委托** 委托在C#中可以被视为一种类型,它类似于函数指针,但更加安全和类型安全。委托允许我们将方法作为参数传递,或者...

    c#委托和事件的讲解

    委托和事件是C#中非常重要且强大的特性,它们不仅能够帮助我们实现更为灵活和可扩展的设计,还能提高代码的封装性和安全性。通过深入理解委托和事件的工作原理及其在.NET框架中的应用,我们可以更好地利用这些特性来...

    通俗的C#委托和事件教程

    总结起来,委托和事件在C#中提供了强大的功能,它们不仅支持回调机制,还能实现事件驱动编程和观察者模式,从而实现组件之间的灵活交互。理解和掌握这些概念对于编写高质量、可维护的C#应用程序至关重要。通过实际...

    张子阳《.NET之美》样章 - C#中的委托和事件(完整)

    委托和事件是实现Observer模式的一种有效方式。 **示例:** 1. **定义主题类**:定义一个主题类,该类包含一个事件: ```csharp public class Subject { public event EventHandler&lt;EventArgs&gt; StateChanged; ...

    委托和事件的相关实例

    通过对这些实例的详细分析和实践,你可以更好地理解和掌握委托和事件在实际项目中的应用,提高代码的灵活性和可维护性。请逐一查看每个文件,研究其中的代码示例,这将有助于巩固理论知识,并提升你的编程技能。

    .net C#中的委托和事件

    总结来说,委托和事件是C#中实现代码复用和解耦的强大工具。通过委托,我们可以将方法作为参数传递,实现回调或策略模式。而事件则提供了一种安全的通知机制,用于在对象之间传递状态变化,符合Observer设计模式的...

    C#委托与事件

    ### C#委托与事件详解 #### 一、引言 在.NET Framework中,**委托**和**事件**是非常重要的概念,对于很多初学者来说,掌握它们并非易事。本文将通过具体的例子逐步介绍委托和事件的基本概念、应用场景以及在.NET ...

    C#中的委托和事件(完整版)

    在C#编程语言中,委托和事件是两个非常重要的概念,它们主要用于实现回调机制和组件间的通信。本文将详细介绍这两个概念,并通过实例帮助理解它们的工作原理。 首先,我们来看委托。委托在C#中可以被理解为一种类型...

    c#的委托和事件教程

    委托和事件在实现观察者(Observer)设计模式时具有重要意义。观察者模式是一种行为设计模式,它允许你定义一个订阅机制,当对象的状态改变时,所有依赖于该对象的其他对象都会得到通知并自动更新。 在.NET ...

    C#委托 事件精讲-张子阳

    ### C#委托与事件详解 #### 一、引言 在.NET Framework中,委托和事件的应用十分广泛。对于初学者而言,理解这两者的概念及其实现可能会遇到一定的困难。本文作者张子阳将以两个示例为基础,深入浅出地讲解委托的...

    C#委托与事件[定义].pdf

    总结起来,C#中的委托和事件提供了强大的功能,使得代码能够动态地响应变化和交互。委托允许我们将方法作为参数传递,增强了代码的灵活性;事件则实现了Observer模式,提供了一种安全、高效的通信机制。理解和熟练...

Global site tag (gtag.js) - Google Analytics