C 委託和事件

2021-08-10 06:22:03 字數 2110 閱讀 1101

什麼是委託

委託是乙個類,它定義了方法的型別,使得可以將方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用if-else(switch)語句,同時使得程式具有更好的可擴充套件性。用最通俗易懂的話來講,你就可以把委託看成是用來執行方法(函式)的乙個東西。

委託的宣告

public

delegate

void

myeventhandler(string str);

在c#中使用delegate關鍵字定義委託,然後使用我們熟悉的函式呼叫的語法來呼叫委託,eventhandler是乙個宣告委託的微軟c#的命名標準

在現實生活中委託就相當於乙個「命令」,具體做什麼事是被委託人的事,程式中委託只是儲存了方法的乙個位址,它自己什麼也沒做。委託中引數型別、返回值必須和方法的引數型別、返回值一致,乙個簡單的例子:

class program

}//小張類,被委託人

public

class mrzhang

public

static

void

buymovieticket()

}

執行結果:

委託事件

可以說事件是乙個特殊的多播委託。也可以說事件是型別對外暴露的唯讀委託線性表

使用事件對應的成員變數會被視為private變數,外界無法超越事件所在物件直接訪問它們,這使事件具備良好的封裝性

宣告事件:

//宣告乙個出版的委託

public

delegate

void

publisheventhander();

//在委託的機制下我們建立以個出版事件

public

event publisheventhander onpublish;

在我們使用事件的時候,必須要宣告對應的委託,而觸發事件,其實就是在使用委託鏈。

乙個簡單的例子:

public

delegate

void

mydelegate(string name);

public

class personmanager

}class program

public

static

void

getname(string name)

}

執行結果:

繫結不同的事件處理方法:

public

delegate

void

mydelegate(string name);

public

class personmanager

if (lenguage == lenguage.english)

execute(name);

}public

static

void

getenglishname(string name)

public

static

void

getchinesename(string name)

//執行事件

protected

void

execute(string name)

}class program

}public

enum lenguage

執行結果:

C 事件和委託

c 程式設計中的事件驅動是說應用程式的執行流程是由外界發生的事件確定的。也就是接受到任務再工作的模式。事件是乙個訊號,它告知應用程式有重要的事情發生。真正的執 況是,各個應用程式把負責不同功能的物件在其執行期間送入windows作業系統,讓這些物件等待windows產生事件。然後加以處理,windo...

C 委託和事件

什麼是委託?委託和事件這兩個概念是完全配合的。委託僅僅是函式指標,那就是說,它能夠引用函式,通過傳遞位址的機制完成。委託是乙個類,當你對它例項化時,要提供乙個引用函式,將其作為它建構函式的引數 先看示例 例中先申明乙個委託,例如 public delegate void somedelegate s...

C 委託和事件

要為類構造乙個事件,必須用 event 來宣告乙個 delegate 型的字段,如 puclic calss test 在建立類的例項後定義這個 load 事件 test m new test m.load new eventhandler m load void m load object sen...