c 中事件委託(一)

2021-08-14 15:47:00 字數 2004 閱讀 7583

事件和委託是兩個概念,不是乙個名詞,委託就是一件事自己不能做或者不想做,然後讓別人去完成,定義了乙個完成的概念,是乙個型別,而事件就是完成這件事的執行者,是乙個成員,也可以這麼理解,委託是對事件的定義,相當於定義了乙個類,而事件就是這個類的乙個物件,雖然語法上不是這個樣子,但是在委託的編譯過程中就是被編譯成了類,這個有興趣的話可以去研究一下,通俗的概念就是這個樣子。總結一下,事件委託就是方法的**。

完全可以把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 只能持有與他簽名相匹配的方法的引用...