委托
是一类继承自System.Delegate的类型
每个委托对象至少包含了一个指向某个方法的指针,提供了程序回调指定方法的机制
使用委托的四个条件
(1) 声明委托类型
(2) 必须有一个方法包含了要执行的代码
(3) 必须创建一个委托实例
(4) 必须调用(invoke)委托实例
1.1 声明委托类型返回类型 参数
delegate void StringProcessor (String input);
1.2 为委托实例的操作找到一个恰当的方法
根据:返回类型、参数
void PrintString(String X)
1.3 创建委托实例
静态方法
StringProcessor proc1, proc2;
proc1=new StringProcessor(StaticMethods.PrintString);
实例方法
InstanceMethods instance=new InstanceMethods(); proc2=new StringProcessor(instance.PrintString);
1.4 调用委托实例
使用 Invoke(包括显式或隐式)
1.5 一个完整的实例
using System; namespace Example { //声明委托类型 delegate void StringProcessor(String input); class Person { string name; public Person(string name) { this.name=name; } //声明兼容的实例方法 public void Say(string message) { Console.WriteLine("{0} says: {1}", name, message); } } class Background { //声明兼容的静态方法 public static void Note(String note) { Console.WriteLine("{0}", note); } } class SimpleDelegationUse { static void Main() { Person jon = new Person("jon"); Person tom = new Person("tom"); StringProcessor jonsVoice, tomsVoice, background; //给三个委托实例赋值 jonsVoice = new StringProcessor(jon.Say); tomsVoice = new StringProcessor(tom.Say); background = new StringProcessor(Background.Note); //调用委托实例 jonsVoice("Hello,Son"); tomsVoice.Invoke("Hello,Daddy!"); background("An airplane flies past!"); } } }