「委託」相當於c++中的「函式指標」,委託必須與所要「指向」的函式在「引數」和「返回型別」上保持一致;
// 定義person類
public class person
}// 定義委託
public delegate string dele_speak(string str);
class program
}
// 定義person類
public class person
public string say(string words)
public string translate(string words)
}// 宣告**
public delegate string dele_str(string str);
class program
}
在person類中建立了三個函式:speak、say、translate,這三個函式在引數和返回型別上相同,因此可是使用同乙個委託(dele_str)。
多路委託:使用同乙個委託「指向」不同的函式,使這幾個函式可以「計算」,其執行邏輯如下:
執行:
string str = dp_speak("rain man");
輸出: speak: rain man
say: rain man
translate: rain man
實際上就是執行下述**:
p.speak("rain man");
p.say("rain man");
p.translate("rain man");
返回值:即最後乙個函式的返回值
有兩個窗體:
3.1 frmuseradd窗體:
public partial class frmuseradd : form
}// 2. 定義委託,並指定引數型別
public delegate void useraddeventhandler(object sender, useraddeventargs e);
// 3. 定義事件,並指定該事件的委託型別
public event useraddeventhandler useraddevent;
private void btnok_click(object sender, eventargs e)
}}
3.1.1. 自定義事件引數類:useraddeventargs
自定義的事件引數類「useraddeventargs」必須繼承自「eventargs」類,在此基礎上新增了public成員「addeduser」
3.1.2 定義委託:useraddeventhandler
3.1.3 定義事件變數:useraddevent
「useraddevent」變數可以理解為「useraddeventhandler」委託的乙個例項化物件,即
public useraddeventhandler useraddevent; // 在該示例中把"event"修飾符去掉也是可以的
3.2 frmmain窗體public partial class frmmain : form
private void btnadd_click(object sender, eventargs e)
}
3.2.1 frmuseradd.useraddeventhandler dele_fn = new frmuseradd.useraddeventhandler(onuseradd);
dele_fn為「useraddeventhandler」的乙個例項(指標),它指向事件處理函式「onuseradd」
3.2.2 frm.useraddevent += dele_fn;
可以看出此處實際就是「多路廣播」,同時也可以看出「useraddevent」事件變數實際就是「useraddeventhandler」委託的乙個例項。
3.3 執行邏輯
該示例看似複雜,其實質是將本在「乙個窗體」中的實現,拆成了「兩個窗體」。下面將兩個窗體的**合成「乙個窗體」
public partial class frmuseradd : form
}// 定義委託,並指定引數型別
public delegate void useraddeventhandler(object sender, useraddeventargs e);
// 定義事件,並指定該事件的「委託」
public useraddeventhandler useraddevent;
public event useraddeventhandler useraddevent;
// useraddevent事件繫結的處理函式
private void onuseradd(object sender, frmuseradd.useraddeventargs e)
private void btnok_click(object sender, eventargs e)
}}
c 自定義事件和委託
在windows 程式設計中用到最多的就是控制項的時間了,微軟給我們很好的方式,把注意力放到事件執行方法的設計和編碼上,但是但我們真正弄懂了事件的真正出發執行原理的話,對我們的程式設計的提高真是非常榜的,例如在windows程式設計中 如果我單擊了乙個button按鈕觸發了button 的click...
C 中自定義事件和委託例項
在windows 程式設計中用到最多的就是控制項的事件了,微軟給我們很好的方式,把注意力放到事件執行方法的設計和編碼上,但是但我們真正弄懂了事件的真正出發執行原理的話,對我們的程式設計的提高真是非常榜的,例如在windows程式設計中 如果我單擊了乙個button按鈕觸發了button 的click...
C 委託 事件 自定義事件的理解
一 委託 委託類似於函式指標,但函式指標只能引用靜態方法,而委託既能引用靜態方法,也能引用例項方法。委託使用分三步 1 委託宣告。2 委託例項化。3 委託呼叫。例程一 using system namespace 委託 private int add int num1,int num2 例中,委託n...