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<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{ 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); }}
这是一个完整的例子
这是一个完整的例子
delegate int T(int A,int B);static void ABC(T C)
{
C(1,2);
}static int EFG(int E,int F)
{
return E*F;
}
[STAThread]
static void Main(string[] args)
{
T myDelegate=new T(EFG);
ABC(myDelegate);
return;
}
{
delegate void delegate1(string str);
delegate void delegate2(int dd);
class ZZConsole
{
[STAThread]
static void Main(string[] args)
{
delegate1 d1= new delegate1(StrMethod);
delegate2 d2= new delegate2(IntMethod);
d1("代理包装字符串方法");
d2(111111);
Console.ReadLine();
}
public static void StrMethod(string str)
{
Console.WriteLine(str);
}
public static void IntMethod(int dd)
{
Console.WriteLine(dd.ToString());
} }
}就是安全的函数指针;
写一个函数
public string GetValue(int i)
{
i.ToString();
}
//定义代理
delegate string GetValuehandler(int i);
//使用安全包装
GetValuehandler mydele = new GetValuehandler(GetValue);
//执行
string s = mydele(99);
相当于执行了
string s = GetValuehandler(99);