快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

初探.NET中的delegate类型与.NET事件

 

1.了解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有什么优势,因为这个程序太简朴了,也许有人会说调用方式要这么麻烦吗,我直接调用就算了,何必要绕个大圈儿去调用呢,其实在实际应用中这种方法会给我们带来很大的灵活性,以后在实际使用过程中你们会慢慢体会到的。:)






返回类别: 教程
上一教程: Websharp使用说明(3)
下一教程: ASP.NET中利用Crystal Report创建图表

您可以阅读与"初探.NET中的delegate类型与.NET事件"相关的教程:
· 第十三章 枚举类型与位标记[《.net框架程序设计》读书笔记]
· .NET中的数据类型的一些变化
· .NET中的特别类型成员----微软 .NET平台系列文章之三(译文/赵湘宁)
· .NET中的特别类型成员
· ASP.NET编程中的十大技巧
    微笑服务 优质保证 索取样品