C#代理VS. C/C++的函数指针

通过二者的对比,将更有助于学习代理。

 

先看一段C的面向过程的函数指针代码:

int max(int x,int y)

{

return (x>y?x:y);

}

int min(int x,int y)

{

return(x<y?x:y);

}

int sub(int x, int y)

{

return(x+y);

}

int minus(int x,int y)

{

return(x-y);

}

void test(int (*p)(int,int),

         int (*q)(int,int),

         int a,

         int b)

{

int Int1,Int2;

Int1=(*p)(a,b);

Int2=(*q)(a,b);

printf("%d,\t%d\n",Int1,Int2);

}

 

int main(int argc, _TCHAR* argv[])

{

    test(max,min,10,3);

    test(sub,minus,10,3);

    return 0;

}

 

 

再看一段C#的代理代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication3

{

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 < b ? a : b);

}

public static int sub(int a, int b)

{

return (a + b);

}

public static int minus(int a, int b)

{

return (a - b);

}

}

class Handler

{

public delegate int Calculation(int a, int b);

public static void EventHandler(Calculation c1,Calculation c2, int a, int b)

{

int x, y;

x = c1(a, b);

y = c2(a, b);

 

Console.WriteLine("{0}:{1}\n{2}:{3}",c1.Method.ToString(), x, c2.Method.ToString(),y);

}

}

class Program

{

static void Main(string[] args)

{

Handler.EventHandler(new Handler.Calculation(MathClass.max), new Handler.Calculation(MathClass.min), 10, 3);

Handler.EventHandler(new Handler.Calculation(MathClass.sub), new Handler.Calculation(MathClass.minus), 10, 3);

Console.ReadKey();

}

}

}

 

看完就明白什么是代理了。

posted @ 2007-09-10 21:57  Unicorn  阅读(280)  评论(0)    收藏  举报