当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > C#事件机制归纳上

ASP.NET
ASP.Net中Session失效的一种编程思路
VS2003创建和打开ASP.net 工程的若干问题
用VS.NET打开或创建web项目出错的解决办法
Windows2003中配置ASP.net动态网站运行环境
Web.config中注册用户控件和自定义控件
ASP.NET AJAX 控件中HTML Intellisense功能的丢失
ASP.NET程序防范SQL注入式攻击的方法
Request.Form中的一些特殊的东西
ASP.NET最常见错误提示
VS2005构建针对DB2的应用程序和Web站点
ASP.NET 2.0控件处理DB2 9应用程序之二
Sandcastle介绍:生成.NET API文档的工具
教程:Asp.net与Xml开发网络硬盘技术
.NET事件处理的步骤
SVN配置和apache的配置
.NET命名空间和目录划分的经验
.NET开发时使用正则表达式的BUG
各版本IIS下ASP.net请求处理过程
ASP.NET MVC实现自己的一个视图引擎
C#关键字

ASP.NET 中的 C#事件机制归纳上


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 71 ::
收藏到网摘: n/a

1.委派的实现过程。 首先来看一下委派,委派其实就是方法的传递,并不定义方法的实现。事件其实就是标准化了的委派,为了事件处理过程特制的、稍微专业化一点的组播委派(多点委派)。下面举一个例子,我觉得把委派的例子和事件的例子比较,会比较容易理解。 using System; class Class1 { delegate int MathOp(int i1,int i2); static void Main(string[] args) { MathOp op1=new MathOp(Add); MathOp op2=new MathOp(Multiply); Console.WriteLine(op1(100,200)); Console.WriteLine(op2(100,200)); Console.ReadLine(); } public static int Add(int i1,int i2) { return i1+i2; } public static int Multiply(int i1,int i2) { return i1*i2; } } 首先代码定义了一个委托MathOp,其签名匹配与两个函数Add()和Multiply()的签名(也就是其带的参数类型数量相同): delegate int MathOp(int i1,int i2); Main()中代码首先使用新的委托类型声明一个变量,并且初始化委托变量.注意,声明时的参数只要使用委托传递的函数的函数名,而不加括号: MathOp op1=new MathOp(Add); (或为MathOp op1=new MathOp(Multiply);) 委托传递的函数的函数体: public static int Add(int i1,int i2) { return i1+i2; } public static int Multiply(int i1,int i2) { return i1*i2; } 然后把委托变量看作是一个函数名,将参数传递给函数。 Console.WriteLine(op1(100,200)); Console.WriteLine(op2(100,200)); 2.事件的实现过程 using System; class Class1 { static void Main(string[] args) { Student s1=new Student(); Student s2=new Student(); s1.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK); s2.RegisterOK +=new Student.DelegateRegisterOkEvent(Student_RegisterOK); s1.Register(); s2.Register(); Console.ReadLine(); } static void Student_RegisterOK() { Console.WriteLine("Hello"); } } class Student { public delegate void DelegateRegisterOkEvent(); public event DelegateRegisterOkEvent RegisterOK; public string Name; public void Register() { Console.WriteLine("Register Method"); RegisterOK(); } } 在Student类中,先声明了委托DelegateRegisterOkEvent(),然后使用event和要使用的委托类型(前面定义的DelegateRegisterOkEvent委托类型)声明事件RegisterOK(可以看作是委托的一个实例。): public delegate void DelegateRegisterOkEvent(); public event DelegateRegisterOkEvent RegisterOK; 然后在Main()函数中,实例化Student类,然后s1.RegisterOK事件委托给了Student_RegisterOK 方法。通过“+=”(加等于)操作符非常容易地为.Net对象中的一个事件添加一个甚至多个响应方法;还可以通过非常简单的“-=”(减等于)操作符取消这些响应方法。 然后,当调用s1.Register()时,事件s1.RegisterOK发生。