C 委託和自定義事件

2021-09-07 22:14:04 字數 2619 閱讀 7750

「委託」相當於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...