using System;
class B
{
public delegate  dynamic AMethod();//定义委托 delegate关键字 dynamic就是那个
//会各种变的类型,基本万能的适合,此时AMethod可以看作一个“方法类”的名字 可以利用
//这个名字 创建委托表。注意 ()内可以写参数,要求与被委托的方法相同,返回类型也是
//因此,委托列表中的方法除了名字不同外,其余基本相同。
//多用于GUI事件编程
//其实 delegate是个类 System.Multicast.Delegate是他的基类
 
 
public static void Main(){
AMethod[] am={//创建委托表,数组型
A.make,
A.did,
A.pick,
};
 
for(int i=0;i<3;i++){//这里foreach也行得通
Console.WriteLine("{0} has been done",DoDelegate(am[i]));
}
}
public static  dynamic DoDelegate(AMethod method){//委托列表中的方法将委托给
//DoDelegate,这个方法必须public static(其实是必须能随时访问到)
 
return method();//这里 method是被委托方法类的实例,易懂
}
}
 
class A
{
public static  dynamic make(){
return "A make";
}
public static string did(){
return "A did";
}
public static string pick(){
return "A pick";
}
}
===========================================
 
---------- 运行C#程序 ----------
A make has been done
A did has been done
A pick has been done
 
输出完成 (耗时 0 秒) - 正常终止