涉及事件开发应用委托

昨天Insus.NET有写了一篇《ASP.NET的简单与面向对象开发http://www.cnblogs.com/insus/p/4146503.html。以当时的想法,只能如此的水准,有网友说应该是使用状态设计模式,但Insus.NET想到这个案例没有使用到状态的设计模式。

反而想到开关有两个事件,就是开与关。下面Insus.NET决定重构这个Switch类,改用委托来实现。

一个普通的电源开关,是让我们开做什么,关做什么,它虽有内置功能实现,正常来说也应该有外置功能。

前一篇中,是靠关开的属性来获取输出参数,使用事件委托之后,是靠两个事件开与关来获取参数。

因此创建一个RunEventArgs类,它继承了EventArgs基类。

Ok,现在我们去重构Switch类:

用红线删除无用代码,分别添加标记1至3部分代码。标记1就是宣街告一个委托delegate和两个事件Event。标记2和标记3分别在两个事件传出参数。

接下来重构Default2.aspx.cs,需要在这里实现Switch类中两个事件:

在实现两个事件,获取开关输出的参数:

本重构中,我们学习到使用委托,e传递参数。责任分清,是属性是事件。

下面是asp.net事件与委托相关:
用户控件(UserControl) 使用事件http://www.cnblogs.com/insus/archive/2011/11/16/2251314.html
事件接口http://www.cnblogs.com/insus/archive/2011/12/12/2284382.html
网页(aspx)与用户控件(ascx)交互与逻辑处理http://www.cnblogs.com/insus/archive/2013/03/09/2951161.html
观察者模式与用户控件之间的互动http://www.cnblogs.com/insus/archive/2011/12/10/2283142.html

时间: 2024-10-01 07:52:40

涉及事件开发应用委托的相关文章

C#事件与委托详解【精华 多看看】

Delegate delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持有与它的签名相匹配的方法的引用".它所实现的功能与C/C++中的函数指针十分相似.它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m.但与函数指针相比,delegate有许多函数委托和事件在 .Net Framework中的应用非常广泛指针不具备的优点.首先,函数指针只能指

关于事件、委托、被调用方法的详解

先上图: 大概就是这样,有5个radiobutton和5个fragment,要做的是选中按钮和页面的对应Show(). 然而,当执行到 radioButton[0].Checked = true; 之后,事件CheckedChange被触发,i的值会显示为5,提示数组越界. Why?这里就要涉及到关于事件→委托→被调用方法的关系问题:(以下均为个人理解) !即是:事件封装委托,委托指向方法! 关键点如下: 1.这里使用的是lambda表达式调用匿名方法,原理上也是一种委托,只是匿名方法原封不动地

C#基础知识之事件和委托

本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 委托的引入:将方法作为方法的参数 我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语: public void GreetPeople(string name) { EnglishGreeting(name); } public

从事件来看委托

事件是基于委托,为委托提供了一种发布/订阅机制,在dotNet到处都能看到事件,一个简单的例子就是在windows应用程序中,Button类提供了Click事件,这类事件就是委托,触发Click事件时调用的处理程序方法需要定义,其参数也是由委托类型定义的,事件模型可以用下图简要说明. 在这个模型中,事件的响应者通过订阅关系直接关联在事件拥有者的事件上,我们把这种事件模型或者CLR事件模型.因为CLR事件本质上是一个委托实例,我们暂且模仿CLR属性的说法,把CLR事件定义为一个委托类型实例的包装器

C# 事件和委托

1 public class Heater { 2 private int temperature; 3 public string type = "RealFire 001"; // 添加型号作为演示 4 public string area = "China Xian"; // 添加产地作为演示 5 //声明委托 6 public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e)

事件与委托

C# 中的委托和事件 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量).例如:委托类型 委托实例 = new 委托类型(方法名); 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易

[C#参考]事件和委托的关系

前面说了委托,接下来就要说一说事件了,同时最后再说一下委托和事件的区别. 事件和委托很相似,事件就好像是被简化的针对特殊用途的委托.看下面的图: 结合前面说的委托的知识,事件的组件应该是这个样子的: 看到发布者必须有触发事件的代码,也就是必须为事件的调用留有接口,不能直接调用事件(不要觉得事件是委托类型的).这里要强调的是事件是成员,是发布者的一个成员,它不是类型,它的类型是委托类型的. 虽然事件是委托类型的,但是事件对委托做了一次封装,并且事件封装的委托是private的,所以是不能从发布者外

C# 事件与委托的区别

C# 事件与委托的区别 先看一段程序 class Program { static void Main(string[] args) { Test obj = new Test(); obj.print += printout1; //绑定printout1方法 obj.print += printout2; //绑定printout2方法 obj.start(); } static void printout1() { Console.WriteLine("输出第一段字符串"); }

事件和委托

委托:对方法的绑定 事件和委托的步骤1.定义委托public delegate 返回值 委托名(参数);2.基于委托定义事件public event 委托名 事件名; 3.注册事件对象.事件名 += new 委托(方法); 4.触发事件 先检查事件是否有人注册,有则触发 if (事件名 != null) 事件名(); 事件和委托,布布扣,bubuko.com