黑马程序员技术交流社区

标题: 看有人问委托,我普及下简单的知识 [打印本页]

作者: 王德钊    时间: 2013-1-30 14:34
标题: 看有人问委托,我普及下简单的知识
我们先看看怎么定义委托:
public delegate void GreetingDelegate(string name);、
我们看一下,这个和定义普通方法的区别。其实就是多了一个关键字delegate。有人问什么事委托,这个说了也不好理解。
我们先看看怎么用:
先定义一个普通方法
public void SayHello(string name)
{
      Console.WriteLine("大家好,我是{0}",name);
}
这里大家注意,我们开始定义的委托是 GreetingDelegate,然后我们在设置这个参数的时候,发现其实委托就是和string 一样,就是一个类型,只不过string 定义的是字符串的参数,而委托定义的是相同类型的方法。
private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
      MakeGreeting(name);
}
然后具体看看怎么用。

static void Main(string[] args) {
               GreetPeople("Jimmy", SayHello);
               Console.ReadKey();
           }

输出:大家好,我是Jimmy。
大家看到这里是不是有点明白了呢?委托不久是一个类嘛!它和string一样,它定义了方法的类型。让方法和普通参数一样进行使用。这样能够使得写出的代码更加简洁,但是可以理解的是,我们平时使用时,委托不是非用不可,真正不能理解,那使用常规方法依然可以的。然后再看看和string有什么不同的。我们其实可以把很多歌方法绑定到同一个委托上,例如上面例子:
我们增加一个方法

public void GoodNight(string name)
{
      Console.WriteLine("晚上好,我是{0}",name);
}
怎么用呢:
GreetingDelegate delegate1;
delegate1=SayHello;
delegate1+=GoodNight;

delegate1("jimmy");
结果就会依次输出:大家好,我是jimmy   晚上好,我是 jimmy
那我们想到了,既然+=是绑定,想要解绑那就是-=啦。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

作者: 许庭洲    时间: 2013-1-30 19:25
值得学习ing!
作者: 徐荣权    时间: 2013-1-30 21:30
正在学习,谢谢分享!
作者: 钟炳杰    时间: 2013-1-30 22:16
经典的例子。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2