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

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 119 ::
收藏到网摘: 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发生。