Please enable JavaScript.
Coggle requires JavaScript to display documents.
抽象、介面、委派、事件
2017/02/24 (繼承(Inherit):
繼承(Inherit)顧名思義就是能夠擁有父母親的特徵,在程式的世…
抽象、介面、委派、事件
2017/02/24
抽象類別(abstract class):
如果要設計一個系統,其中會包含數個相似的類別,且這些類別具有許多共通的特性。 這時你就可以建立一個類別,用來定義這些共通的特性,並做為這些類別的父類別,這就是「基底類別」。 有時候在基底類別中,我們僅定義了某些方法名稱,並未實作其中的邏輯,希望由各個延申類別再去實作,這時就可以將此類別設計成「抽象的基底類別」。 #
抽象類別:
有以下幾個特性:
抽象類別不能被 new 出實體。
抽象類別一定要被繼承後,才可以使用到它內部的功能。
若抽象類別定義了抽象方法,繼承它的子類別一定要實作這個方法。
抽象類別並沒有要求所有成員都要是抽象的,但是若類別中有任何一個抽象成員,則該類別必須為抽象類別。
-
-
介面(interface):
如果要設計一個系統,其中包含多個不同的類別,但是這些類別具有部份相同名稱的功能。 這時你就可以建立一個介面,用來定義這些相同名稱的功能。 這麼設計的好處是,只要有實作這個介面的類別,都會具有這些功能。 #
-
委派(delegate):
通常我們想要執行某個方法,只要直接叫用那個方法的名稱即可。 可是如果你要執行的方法,卻還不知道名稱,這是就可以使用委派。 例如,你要設計一個元件,當元件中某個事件發生時,應該去執行某個方法,但你並不知道以後使用這個元件的人會使用什麼方法名稱,這時你就可以利用委派來處理。不管怎樣,只要記住:委派是一個沒有內容的方法,其功能就是要當一個中介者,專門用來協調處理要執行的方法。
即然說,委派是專門用來協調處理要執行的方法,但也不是所有方法都來者不拒,必須和他的簽章(Signature)相同才行。
委派的特性:
1.委派可以同時綁兩個以上的函式
2.委派可以讓很多Parent宣告使用
3.委派綁定了函式之後,當呼叫函式時,並不會在遇到Return的時候就走回去,而是會把整個函式跑完的。(同步的情況下產生)
4.委派產生之後,不但Child自己可以Invoke,連Parent也可以呼叫Invoke,只不過,Parent用起來就沒什麼太大的實質意義了。
5.委派同時綁兩個以上的函式之後,會每個函式都跑過了,才會回到委派的下一行來。(同步的情況下產生)
使用委派:
什麼時候會用到委派?
1.你要寫一個Class或Interface,其中有個函式,會讓別的Class呼叫。也就是在撰寫類別的時候,就能夠呼叫非實體的函式。
2.你要寫一個Class或Interface,其中有個函式,會達成某種特別功能,但是,寫的時候,你並不知道這個功能會怎麼完成,好比說,你這個Class是個登入的介面或Model,但是密碼驗證的部分,是你提供方法出來,給要使用你這個Class的人,到時候要實作函式內容的(將委派綁定函式)。
:star:方法:
1.要使用委派,必須先實體化一個委派,再叫用(invoke)委派,委派就會呼叫封裝的方法。
2.如果你要執行的方法不止一個,就可以利用「+=」加法指派運算子,將新的方法位置參考加入委派物件。
3.最後叫用委派,也就是執行委派物件的 Invoke 方法。
-
-
事件:
「事件」是什麼,大家應該都很清楚,就是當某件事情發生時,你要程式可以自動去執行某件事。 問題是,事件應該如何定義?還有事件發生時,該如何讓相關的執行工作動起來?要定義一個事件其實很簡單,只要透過 event 關鍵字即可。 只是,當事件發生時,我們想要指派一個工作給它, 可是這個工作通常是由訂閱者決定的,也就是必須在具有這個事件的物件在具體化之後才會被決定。 那麼在這個類別中,該如何來定義事件發生時,所要執行的工作?這時候就得利用上面介紹的委派來幫我們做好中介者的角色。 所以定義事件的時候,也要指名委派的名稱。
-
訂閱事件:
訂閱事件是訂閱者要做的事,主要可分成二個部份:
Step1:撰寫事件處理函式:這個函式的簽章 (Signature) 必須與事件的委派簽章相符 (相同的回傳值,相同的參數列)。
Step2:訂閱事件:在適當的地方,撰寫訂閱事件程式碼。
事件與委派的差別:
事件將會固定父母類別,不讓人隨意更改其中的數值 #:explode:例子:
Windows From1 按鈕事件是已經在微軟裡面定義好的,而我們在定義介面時,並不會去定義到Btn的按鍵以及相關的事件,我僅僅只是訂閱他們Btn的事件。