使用方法名做参数的函数
委托的定义:
//定义了委托,它定义了可以代表的方法的类型。有一个字符串为参数无返回值的方法
public delegate void GreetingDelegate(string name)
private static void EnglishGreeting(string name)
{
Console.WriteLine("Moring,"+name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好,"+name);
}
GreetPeople()方法:
//它接受一个GreetingDelegate类型的方法做参数
public void GreetPeople(string,GreetingDelegate MakeGreeting) { MakeGreetimg(name); }
调用
GreetPeople("Jimmy Zhang",EnglishGreeting); GreetPeople("张子阳",ChineseGreeting);
另一种调用
GreetingDelegate delegate1,delegate2; delegate1=EnglishGreeting; delegate2=ChineseGreeting; GreetPeople("Jimmy Zhang",delegate1);
GreetPeople("张子阳",delegate2);
不同于string,可以将多个方法赋给同一个委托,或者叫多个方法绑定到同一委托,当调用这个委托时,依次调用其绑定方法。
GreetingDelegate delegate1; delegate=EnglishGreeting;//先给委托类型的变量赋值 delegate1+=ChineseGreetin;//给次委托在一次赋值再绑定一个方法 //将先后调用绑定的方法 GreetPeople("Jimmy Zhang",delegate);
//简化写法
GreetingDelegate delegate1=new GreetingDelegate(EnglishGreeting);
delegate1+=ChineseGreeting;
GreetPeople("Jimmy Zhang",delegate);
使用-=取消委托
delegate1-=EnglistGreeting;
另外,可直接通过委托调用函数:
GreetingDelegate delegate1=new GreetingDelegate(EnglishGreeting); delegate("Jimmy Zhang");