在現實中,有數不清的可以稱之為事件的情況,比如你拿起了水杯,給手機充電,做乙個專案時,小組負責人給你下達了任務,上市公司的總公司給其旗下的子公司下達任務等等,我們今天就用舉例中的最後乙個例子來說明一下,到底什麼是事件?
首先要說的就是乙個個人認為很重要的概念,事件其實就是委託,但是在某些地方又不能這樣說,但是能確定的就是,事件其實是委託的一種特殊使用方式。
來看一下事件的簡單使用(看不懂沒關係)
using system;
delegate void handler();//宣告委託可用來定義單個委託多廣播或者是事件
class event_text}}
}class text
void text_event()
}class text2
void text_event()
}class program
}
通過這樣梳理可能還是很不明白,那就往下看
例子中的第乙個類event_text相當於乙個總公司,如果這個總公司不存在的話,事件也不可能被呼叫,存在了這個總公司之後,再總公司中存在這樣一件事,什麼事呢?circular()這件事,當總公司想要執行這件事的時候,他自己是沒有解決這件事的方法的他不會,但是他有旗下的公司,也就是類text和類text2,這兩個類裡面有解決這件事的辦法,所以如果總共公司想要處理這件事,就必須來通知旗下的子公司來提供解決的方法,雖然通知了子公司來解決,但是子公司的方法太多,它也不知道具體要使用什麼方法來解決這件事,怎麼辦呢?再子公司成立的時候,就把這件事的解決方法與總公司的確定任務關聯起來,也就是將函式方法註冊到事件裡面,也就是例子中的
。。。
public text(event_text event_text)
。。。public text2(event_text event_text)
。。。
所以事件和委託的區別也就出來了,事件其實就是委託的一種特殊的使用方法,只不過他比委託要更安全一點,事件只能再宣告事件的那個類中使用,而且不能直接呼叫,是要通過乙個事件的導火索來使用(第乙個類的circular()函式方法)
下面是添有注釋的**,可能更容易理解
using system;
delegate double max(int a, int b);//宣告委託
class event_text}}
}class text
void text_event()
}class text2
void text_event()
}class program
}
想過嗎?事件可以實現的功能其實委託也都能實現,那為什麼還要有事件這一用法呢?,在委託中,不管是那個類都有許可權向委託中新增函式方法,也即是都有許可權對委託進行修改,這是我們所不想看到的,開捋一下,客戶端可以修改伺服器委託所繫結的函式方法,在某些情況下,這樣是很可怕的,所以事件應運而生,上面已經說過,事件只能在宣告事件的類中訪問。並且,在多執行緒的應用中,也可以看到,委託其實是在主線程中呼叫,而事件則是另開執行緒進行。
所以事件其實是將委託進行封裝,只能通過事件進行委託事件的新增和刪除,保障了委託的封裝性。
只有在特定的時候由發布者進行事件的觸發,限制了客戶端的許可權,保護**。
理解C 事件
如果做過gui程式開發,可能對上面的描述會比較熟悉。在gui程式中,單擊乙個button會觸發乙個click事件,然後會執行一系列的操作,這一系列的操作就被存放在乙個委託例項中。接下來我們就看看事件。使用委託中的問題 回到前面文章中蘋果和富士康的例子,蘋果將iphone的組裝 包裝和運輸的工作全部委...
理解C 事件
前面文章中介紹了委託相關的概念,委託例項儲存這乙個或一組操作,程式中將在某個特定的時刻通過委託例項使用這些操作。如果做過gui程式開發,可能對上面的描述會比較熟悉。在gui程式中,單擊乙個button會觸發乙個click事件,然後會執行一系列的操作,這一系列的操作就被存放在乙個委託例項中。接下來我們...
委託 事件的個人理解
事件 乙個用event進行了封裝的委託型別的變數,使得在進行註冊的時候只能使用 或者 需要乙個觸發者和乙個執行者,類似於observer模式中的subject和observer 當乙個物件的狀態發生改變時,所有依賴於他的物件都會得到通知並被自動更新。觸發者 對委託 事件進行定義,並觸發事件的執行。s...