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

ASP.NET
asp.net ajax功能强大的UpdatePanel控件
mscorwks.dll在.Net中的地位及代码保护应用
使用.NET实现你的IP切换器
在ADO.NET中用参数化查询缩短开发时间
Login控件:用户登录失败的消息提示
如何用C#来部署数据库
.net打包自动安装数据库
数据库开发个人总结(ADO.NET小结)
ASP.NET如何进行性能优化问题(2)
ASP.NET如何进行性能优化问题(1)
用.Net实现基于CSS的AJAX开发(6)
用.Net实现基于CSS的AJAX开发(5)
用.Net实现基于CSS的AJAX开发(4)
用.Net实现基于CSS的AJAX开发(3)
用.Net实现基于CSS的AJAX开发(2)
用.Net实现基于CSS的AJAX开发(1)
C#下用P2P技术实现点对点聊天
ASP.NET服务器端异步Web方法
在asp.net中如何从视频文件中抓取一桢并生成图像文件
.NET中多线程的同步资源访问

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


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