委托-------1

使用方法名做参数的函数

委托的定义: 

//定义了委托,它定义了可以代表的方法的类型。有一个字符串为参数无返回值的方法
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");

 

posted @ 2012-08-15 10:29  yzj1212  阅读(153)  评论(0编辑  收藏  举报