事件和委託是兩個概念,不是乙個名詞,委託就是一件事自己不能做或者不想做,然後讓別人去完成,定義了乙個完成的概念,是乙個型別,而事件就是完成這件事的執行者,是乙個成員,也可以這麼理解,委託是對事件的定義,相當於定義了乙個類,而事件就是這個類的乙個物件,雖然語法上不是這個樣子,但是在委託的編譯過程中就是被編譯成了類,這個有興趣的話可以去研究一下,通俗的概念就是這個樣子。總結一下,事件委託就是方法的**。
完全可以把delegate理解成c中的函式指標,它允許你傳遞乙個類a的方法m給另乙個類b的物件,使得類b的物件能夠呼叫這個方法m,說白了就是可以把方法當作引數傳遞。不過delegate和函式指標還是有點區別的,delegate有許多函式指標不具備的優點。首先,函式指標只能指向靜態函式,而delegate既可以引用靜態函式,又可以引用非靜態成員函式。在引 用非靜態成員函式時,delegate不但儲存了對此函式入口指標的引用,而且還儲存了呼叫此函式的類例項的引用。其次,與函式指標相 比,delegate是物件導向、型別安全、可靠的受控(managed)物件。也就是說,runtime能夠保證delegate指向乙個有效的方法, 你無須擔心delegate會指向無效位址或者越界位址。
現在有乙個遊戲,裡面開始只有乙個人物,流浪法師,這個英雄使用法術進行攻擊。程式是這樣子的
//主方法
static void main(string args)
//呼叫英雄攻擊的方法
public static void heroattack(string style)
//英雄攻擊具體的方法
public static void liulangattack(string style)
但是後來遊戲改了,發現乙個英雄不夠,需要加入寒冰,蓋倫,加入後又出現了新的問題,每個英雄都有自己不同的攻擊方法,需要修改程式了,感覺很煩,需要使用乙個列舉來存放英雄型別,然後根據英雄型別呼叫不同的攻擊方法。程式如下:
public enum hero
static void main(string args)
public static void heroattack(string style,hero hero)}}
public static void liulangattack(string style)
public static void hanbingattack(string style)
public static void gailunattack(string style)
這樣程式是寫好了,但是隨著英雄的不斷增多,需要不停的修改原來的**,面對物件語言中不提倡過多的修改原始碼 ,所以這樣是不符合開發標準的,那麼可以使用事件委託來完成這個事情,說明一下基本步驟。
第一步:建立委託型別。
第二步:建立委託型別對應的事件。
第三步:通過事件去執行相應的方法。
需要注意的地方:
1,委託的返回值和引數型別必須和要委託的方法是一致的。
2,事件的名稱和委託的名稱保持一致。
我們要做的是這麼乙個過程,要有乙個委託,乙個事件,多個攻擊的方法,但是我們不確定要執行哪乙個,需要我們在執行的時候告訴他,要執行哪個方法,需要哪些引數。接下來看程式:
//定義乙個事件委託
public delegate void attackeventhandler(string style);
//定義乙個事件
public static event attackeventhandler attackevent;
static void main(string args)
public static void liulangattack(string style)
public static void hanbingattack(string style)
public static void gailunattack(string style)
這樣寫完之後,無論加入多少英雄,只需要編寫自己的方法,然後去使用事件委託去呼叫就ok了。 c 事件 委託
c 事件 假設場景 在比賽過程中,當裁判員槍聲響起,發生了乙個事件,裁判員通知該事件發生,參加比賽的運動員仔細聽槍聲是否發生。運動員是該事件的訂閱者,沒有參賽的人不會注意,即沒有訂閱該事件。c 中使用事件需要的步驟 1 建立乙個事件 event 委託名 事件 2 訂閱事件 事件 new 委託名 方法...
c 事件委託
c 使用委託模型 來實現事件,事件的處理方法不必在將生成事件的類中定義,需要做的事情就是把事件源和事件處理程式結合起來,使用事件處理委託,簡稱事件委託可以定義為生成事件的類的乙個成員,事件委託為多播的。事件委託的形式 public delegate void mousehandler object ...
c 中的委託與事件
c 委託與事件 一 委託 關鍵字 delegate 委託是c 中的一種型別,它實際上是乙個對某個方法引用的類 委託是一種引用方法型別 一旦為委託分配了方法 委託將與該方法有相同完全的行為 委託具有引數 和返回值 delegate類能擁有乙個簽名 signature 只能持有與他簽名相匹配的方法的引用...