介绍

本文章用最简单的方式讲述关于C#委托的使用方法

(在开始之前以下几点你必需知道)

委托

  • 有点象方法的容器
  • 当声明一个委托就象声明一个新类你可以在对象中把它实例化
  • 可以存储一个或多个方法同样可以移去
  • 方法要存储在委托中必需有相同的参数和返回类型

如果你不明白最后点不要担心它是比较特别的:)

编码

这是怎样声明一个委托...

 //u declare it by  
//  void  (list of parameters)
public delegate void MyMessageDelegate(string msg); 

下一步,创建你自己的方法。

正如你所见,我创建2个名为MessageShowerAnotherMessageShower方法正如之前所说的参数要相同。

delegate(string chicken,int bananas)

yourmethod(string chicken,int bananas)

        private void MessageShower(string message)
        {
            //shows the string argument in a messagebox
            MessageBox.Show("MessageShower - " + message);
        }

        private void AnotherMessageShower(string anothermessage)
        {
            //shows the string argument in a messagebox
            MessageBox.Show("AnotherMessageShower - " + anothermessage);
        }

现在我们声明了委托及两个方法,现在我们将开始学习怎样使用委托。我们拖放一个button到form在点击事件处我们可以这样做

         private void btnTryButton_Click(object sender, EventArgs e)
        {
            MyMessageDelegate MessageObject = new MyMessageDelegate(MessageShower);
            MessageObject += new MyMessageDelegate(AnotherMessageShower);
            MessageObject("Message Sent From Da Delegate!");
        } 

这是十分重要的一部分一旦你明白,委托实际是十分简单的=D

第一行

 MyMessageDelegate MessageObject = new MyMessageDelegate(MessageShower);
 

这行是创建一个新的MyMessageDelegate(委托)的新实例,MyMessageDelegate就象类一样使用。

正如之前说的MessageShower存储在容器中。

第二行,

MessageObject += new MyMessageDelegate(AnotherMessageShower);

这是委托中的广播,意味你有多于一个方法在委托对象中被引用。

这行代码增加另一个方法到已经创建的委托对象中所以现在它包含2个方法

  1. MessageShower
  2. AnotherMessageShower

然后第三行即最后一行..

MessageObject("Message Sent From Da Delegate!"); 

这里,你使用委托对象如方法一样。传送字符参数“Message Sen From Da Delegate!”到MessageObject将会激活存储在委托的方法!明白没有?

结果如下:先

MessageShower("Message Sent From Da Delegate!"); 

 

然后

AnotherMessageShower("Message Sent From Da Delegate!"); 

另一方面,你可以用-=操作符移去委托中的方法。

MessageObject -= new MyMessageDelegate(AnotherMessageShower); 

这将移去委托中的方法

委托被用在什么场合?

有时当前你想使用一个方法,但你不知道它什么时候要执行,你想该方法按照你你想的方式去执行,委托十分合适。

注:摘自:http://www.ideaplan.com.cn