c#委託與事件,理解了好多遍還是很彆扭,昨日又遇此問題,痛下決心,研究一番!
委託實際上就是把你定義的一個方法當作一個委託的參數來用。如:
public delegate void doSomething(string name);這是一個委託,相當於一個類,但是這個委託有一個string型別參數name和傳回型別void,強調執行個體化委託時,
委託的建構函式中傳遞的方法也應該有string型別參數和傳回型別void。
如方法:
public void Hello(string name)
{
Console.WriteLine("Hello," + name + "!");
}
也有一個string型別參數和傳回型別void。現在我們可以把委託和方法聯絡起來了如:doSomething dg=new doSomething(hello);
現在我們就能夠直接調用委託來帶代替具體的方法做事情了,如:dg("guoyuanwei"),輸出:hello,guoyuanwei
再看一個例子來 分析事件與委託
this.button1.Click += new System.EventHandler(this.button1_Click);
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("毛主席萬歲");
}這段代碼相信大家都知道就是點擊按鈕彈出毛主席萬歲這幾個字
以上代碼中System.EventHandler在微軟的手冊上是這樣定義的public delegate void EventHandler (Object sender,EventArgs e) 所以可以理解為就是一個委託,只不過這個委託是系統定義好的。this.button1_Click相當於委託建構函式中的參數即方法,此方法的定義中也有object sender, EventArgs e這兩個參數,與委託定義的一致。
this.button1.Click += 這是個事件,至於這個事件怎麼觸發的咱也不用管。