委托派生于基类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); } } |
正在阅读:.NET技术学习:C#中的委托.NET技术学习:C#中的委托
2004-02-14 09:34
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键