雖然在博客園里面已經有很多關于C#委托和事件的文章,但是為了自己在學習的過程中,加深對委托的理解,我還是決定寫一下自己的心得體會。以備他日在回來復習。委托(delegate)是一個類,但是這個類在聲明的時候跟普通的類有些不同。不帶class 關鍵字等。如下:


{
Test();
Console.ReadKey();
}
static void SayHello(string name)
{
Console.WriteLine("Nice to me you "+name);
}
static void SayHelloToo(string name)
{
Console.WriteLine("Nice to me you too!"+name);
}
public delegate void DoSomething(string name);//聲明一個委托類
static event DoSomething MyEvent; //聲明一個DoSomething類型的事件。
public static void Test()
{
DoSomething ds1 = new DoSomething(SayHello); //聲明一個DoSomething委托類型的對象
DoSomething ds2 = new DoSomething(SayHelloToo);
ds1("楊鳳輝"); //委托對象,相當于對應函數的指針
MyEvent += ds1; // 將兩個委托對象綁定到事件對象上。
MyEvent += ds2; // -=為取消綁定。
}
新建一個委托對象,就相當于該對象是參數(方法)的指針應用,一般事件,都是針對于某一具體的委托的事件。一個事件可以綁定多個方法,事件觸發后,綁定的方法會依次被執行。?在其他牛人的博客內,有一個很好的舉例。在Windows程序設計中,在設計器中雙擊一個按鈕button1.會自動生成該button的單擊響應函數:
private void button1_Click(object sender, EventArgs e)
??????? {
??????? }
????你會發現幾乎所有方法都是兩個參數的:object sender, EventArgs e。微軟為這些方法定義了一個委托private System.EventHandler(object sender,EventArgs e)。我們查看:Designer.cs里面button1對象的屬性。有一個click的事件屬性,綁定了button1_Click方法。
this.button1.Click += new System.EventHandler(this.button1_Click)?。
有一點我不明白的是:事件與委托對象有關系嗎,在聲明事件的時候,也是關于某個委托的事件,而委托對象,也是關于該委托的對象。難道那么都是該委托類的對象?