电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C#>>Asp.NET中delegate类型与事件的详细解析:

Asp.NET中delegate类型与事件的详细解析

来源:csdn | 2007-6-20 | (有4183人读过)

了解delegate 
delegate可以认为是一种函数的指针,一个delegate类型的实例代表可以代表一个方法,在实际使用中我们可以在不知道方法名称的情况下调用到这个方法。前面说太多可能会使大家变得糊涂,或者摸不着头脑,我举个例子,来详细说明此种类型的用法: 


整个例程的代码,是控制台项目. 

//代码开始 
using System; 

namespace ConsoleApp1 

  
 public delegate string FunctionPointer(string strName); 
 class Class1 
 { 
   
  [STAThread] 
  static void Main(string[] args) 
  { 
   // 
   // TODO: 在此处添加代码以启动应用程序 
   System.Console.WriteLine("Hello World!"); 
   FunctionPointer fpa = new FunctionPointer(aFunction); 
   FunctionPointer fpb = new FunctionPointer(bFunction); 
   InvokeMethod(fpa); 
   InvokeMethod(fpb); 
   System.Console.ReadLine(); 
   // 
  } 
  public static string aFunction(string sNameA) 
  { 
   return "aFunction say i’m " + sNameA; 
  } 
  public static string bFunction(string sNameB) 
  { 
   return "bFunction say i’m " + sNameB; 
  } 
  public static void InvokeMethod(FunctionPointer fp) 
  { 
   System.Console.WriteLine(fp("storm")); 
  } 
 } 

//代码结束 

步骤1:要使用delegate类型首先应该建立delegate样板,所谓delegate样板其实就是delegate能够调用的方法的签名,什么是方法的签名?方法的签名可以认为是方法的参数类型、数量、返回值类型这些特征。 

定义的形势如下: 访问修饰符(public) delegate 返回值类型 名称(参数列表); 

说明:返回值类型应该是你定义的delegate类型所准备调用的方法的返回值类型,参数列表应该与你准备使用delegate来调用的方法的参数列表相同(指的是数量、类型、顺序相同,名称当然无所谓了) 
一个实际的例子就是上面程序的 
                public delegate string FunctionPointer(string strName); 

步骤2:定义delegate准备调用的方法,当然该方法要与你刚才声明的delegate有相同的返回值和参数表; 
例如上面程序的: 
                public static string aFunction(string sNameA) 
                { 
                     return "aFunction say I’m " + sNameA; 
                } 
                public static string bFunction(string sNameB) 
               { 
                     return "bFunction say I’m " + sNameB; 
               } 

步骤3:定义delegate类型的处理函数,在这里可以定义如何调用你的delegate类型所指的方法,在实际使用中可以在这里来动态决定传入的参数等信息。 
如上面程序的 
                public static void InvokeMethod(FunctionPointer fp) 
               { 
                     System.Console.WriteLine(fp("storm97")); 
               } 

步骤4:建立delegate实例,传入欲调用的方法名,要使用delegate类型必须建立他的实例,一个实例代表了一个方法的引用(可以这样说) 


delegate实例定义的形式: 
           XXX(代表你定义的某个delegate类型的名称)  实例名(假设是实例A) = new XXX([欲调用的方法名(假设是方法A)]); 
意思是实例变量A指向方法A的程序代码段; 
如: 

  static void Main(string[] args) 
  { 
   // 
   // TODO: 在此处添加代码以启动应用程序 
   System.Console.WriteLine("Hello World!"); 
   //建立第一个delegate的实例fpa,该实例代表方法aFunction; 
   FunctionPointer fpa = new FunctionPointer(aFunction); 
   //建立第一个delegate的实例fpa,该实例代表方法bFunction; 
   FunctionPointer fpb = new FunctionPointer(bFunction); 
   ...... 
   // 
  } 
下面就可以运行整个程序了。 
如: 
  static void Main(string[] args) 
  { 
   // 
   ...... 
   //调用方法aFunction 
   InvokeMethod(fpa); 
   //调用方法bFunction 
   InvokeMethod(fpb); 
   // 
  } 

输出结果: aFunction say I’m storm97 
                      bFunction say I’m storm97 

当然,从这个例子看不出delegate有什么优势,因为这个程序太简单了,也许有人会说调用方法要这么麻烦吗,我直接调用就算了,何必要绕个大圈儿去调用呢,其实在实际应用中这种方式会给我们带来很大的灵活性,以后在实际使用过程中你们会慢慢体会到的。:) 


www.cncfan.com提示,本文作者Blog地址为:http://blog.csdn.net/storm97/,欢迎大家访问与作者交流。
C#热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号