正在阅读:.NET技术学习:C#中的委托.NET技术学习:C#中的委托

2004-02-14 09:34 出处:PConline 作者:lotusswan/CSDN 责任编辑:linjixiong
 委托派生于基类System.Delegate,不过委托的定义和常规类的定义方法不太一样。委托的定义通过关键字delegate来定义:  public delegate int myDelegate(int x,int y);  上面的代码定义了一个新委托,它可以封装任何返回为int,带有两个int类型参数的方法。任何一个方法无论是实例方法还是静态方法,只要他们的签名(参数类型在一个方法中的顺序)和定义的委托是一样的,都可以把他们封装到委托中去。这种签名方法正是保证委托是类型安全的手段之一。  产生委托实例和产生类实例(对象)差不多,假如我们有如下的方法:  public int sub(int x,int y)  {  return(x+y);  }  我们就可以使用如下的代码得到一个委托实例:  myDelegate calculatin=new myDelegate(sub);  接下来我们就可以直接使用calculation调用sub方法了: calculation(10,3);  下面我们将用委托重写上面的一个程序来看一下在C#中如何通过委托实现由函数指针实现的功能:  using System;  class MathClass  {  public static int max(int a,int b)  {  return(a>b?a:b);  }  public static int min(int a,int b)  { return(a }  public static int sub(int a,int b) {  return (a+b);  }  public static int minus(int a,int b)  {  return (a-b);  }  }  class Handler  {  private delegate int Calculation(int a, int b);  private static Calculation[] myCalculation=new Calculation[2];  public static void EventHandler(int i,int a,int b)  {  switch (i)  {  case 1:  myCalculation[0]=new Calculation(MathClass.max);  myCalculation[1]=new Calculation(MathClass.min);  Console.WriteLine(myCalculation[0](a,b)); Console.WriteLine(myCalculation[1](a,b)); break;  case 2:  myCalculation[0]=new Calculation(MathClass.sub);  myCalculation[1]=new Calculation(MathClass.minus);  Console.WriteLine(myCalculation[0](a,b));  Console.WriteLine(myCalculation[1](a,b));  break; default:  return;  }  }  }  class Test  {  static void Main()  {  Handler.EventHandler(1,10,3);  Handler.EventHandler(2,10,3);  }  }
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品