一 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设计模式是构建高效、可扩展的应用程序的重要概念。这篇文档将深入探讨这些主题,以帮助你更好地理解它们的用途和实现方式。 首先,我们来看委托(Delegate)。委托在C#中相当...
委托、事件和Observer设计模式是面向对象编程中的关键概念,特别是在C#中有着广泛的应用。本文将深入探讨这三个概念,并通过实例帮助初学者理解和掌握它们。 首先,让我们从委托(Delegate)开始。委托在C#中可以被...
C#中的委托与事件讲透读书笔记学习心得 ...委托和事件是C#中两个非常重要的概念,它们使得我们的代码更加灵活和可扩展。通过本文,我们学习了委托和事件的基本概念、它们的关系、以及它们在Observer设计模式中的应用。
本篇文章将深入探讨C#中的委托和事件,并通过一个简单的实例来阐述它们的工作原理。 **一、委托** 委托在C#中可以被视为一种类型,它类似于函数指针,但更加安全和类型安全。委托允许我们将方法作为参数传递,或者...
委托和事件是C#中非常重要且强大的特性,它们不仅能够帮助我们实现更为灵活和可扩展的设计,还能提高代码的封装性和安全性。通过深入理解委托和事件的工作原理及其在.NET框架中的应用,我们可以更好地利用这些特性来...
总结起来,委托和事件在C#中提供了强大的功能,它们不仅支持回调机制,还能实现事件驱动编程和观察者模式,从而实现组件之间的灵活交互。理解和掌握这些概念对于编写高质量、可维护的C#应用程序至关重要。通过实际...
委托和事件是实现Observer模式的一种有效方式。 **示例:** 1. **定义主题类**:定义一个主题类,该类包含一个事件: ```csharp public class Subject { public event EventHandler<EventArgs> StateChanged; ...
通过对这些实例的详细分析和实践,你可以更好地理解和掌握委托和事件在实际项目中的应用,提高代码的灵活性和可维护性。请逐一查看每个文件,研究其中的代码示例,这将有助于巩固理论知识,并提升你的编程技能。
总结来说,委托和事件是C#中实现代码复用和解耦的强大工具。通过委托,我们可以将方法作为参数传递,实现回调或策略模式。而事件则提供了一种安全的通知机制,用于在对象之间传递状态变化,符合Observer设计模式的...
### C#委托与事件详解 #### 一、引言 在.NET Framework中,**委托**和**事件**是非常重要的概念,对于很多初学者来说,掌握它们并非易事。本文将通过具体的例子逐步介绍委托和事件的基本概念、应用场景以及在.NET ...
在C#编程语言中,委托和事件是两个非常重要的概念,它们主要用于实现回调机制和组件间的通信。本文将详细介绍这两个概念,并通过实例帮助理解它们的工作原理。 首先,我们来看委托。委托在C#中可以被理解为一种类型...
委托和事件在实现观察者(Observer)设计模式时具有重要意义。观察者模式是一种行为设计模式,它允许你定义一个订阅机制,当对象的状态改变时,所有依赖于该对象的其他对象都会得到通知并自动更新。 在.NET ...
### C#委托与事件详解 #### 一、引言 在.NET Framework中,委托和事件的应用十分广泛。对于初学者而言,理解这两者的概念及其实现可能会遇到一定的困难。本文作者张子阳将以两个示例为基础,深入浅出地讲解委托的...
总结起来,C#中的委托和事件提供了强大的功能,使得代码能够动态地响应变化和交互。委托允许我们将方法作为参数传递,增强了代码的灵活性;事件则实现了Observer模式,提供了一种安全、高效的通信机制。理解和熟练...