介面包含內容概述2 委託與事件之惑

2022-03-13 02:07:34 字數 3005 閱讀 9252

前言:

上篇博文《介面包含內容概述1——介面相關概述及介面中屬性的實現》最後留有一疑問:乙個介面為什麼可以包含乙個事件,卻不能包含乙個委託呢? 在這裡要想對這個問題解答,首先必須搞清楚委託和事件這兩個容易使人眩暈的問題:

委託概述:

在 c 語言 的眾多種型別指標中,有一種叫做「函式指標」,即是指函式的入口位址。在 c# 中委託的概念與其相類似。而與c 語言中函式指標不同的是,.net 中的委託是型別安全的。

委託的使用:

同使用乙個類相類似,首先定義要使用的委託,這裡規定了委託所代表的哪種型別的方法; 其次建立該委託的乙個或多個例項。這裡舉一示範**:

//description: 通過建立委託例項,表現委託的定義及使用方法

////notes: 為簡便,將委託的定義,和驗證**放於一起

namespace

delegatedemo

static

void

main(

string

args)

", showint(

1));}}

}最後除錯結果為:

上例可見一般情況下,委託的應用,即在對應乙個方法使用委託的情況下。

注意:對於式:

delegateshowint showint 

=new

delegateshowint(showdata) 可以認為是所有委託都有的「建構函式」形式——其引數是函式引用。

多播委託:

前面例子中是最為簡單、常用的一種形式(乙個委託例項,呼叫乙個方法)。因為我們可以例項化乙個或多個某種委託的例項,另一方面,我們也可以讓乙個委託呼叫多個方法,這裡稱作多播委託。

//description: 通過建立多播委託例項,表現多播委託的定義及使用方法

////notes: 為簡便,將委託的定義,和驗證**放於一起

namespace

delegatedemo

", i);

}public

static

void

showdata2(

inti)",i

+1);}

static

void

main(

string

args)}}

而對應的除錯結果為:

通過例項,可見我們對委託物件,實現了多個方法的繫結。

注意:之所以要求多播委託的返回型別為void,是因為如果有返回值,將沒有意義,起到作用的只有最後乙個被呼叫的函式而已!

事件概述:

有了前述對委託的講述,為這裡講解事件做好了鋪墊。事件,其在windows form中得到極大應用,這裡舉一最常見的點選按鈕,觸發事件的例子。

1private

void

initializecomponent()

2可見在14行,對物件buttonone的事件click賦予了委託,該委託指定了形式:

private

void

button_click(

object

sender, eventargs e)

對應型別的引數含有object和eventargs,並且返回為void形式。這樣事件就與委託相聯絡上。

同樣可以實現不同物件的事件,對應同一委託情形:

this

.buttonone.click 

+=new

system.eventhandler(

this

.button_click);

this

.buttontwo.click 

+=new

system.eventhandler(

this

.button_click);

綜上可見:

1.委託,作為一種特殊的型別,雷同於定義乙個類(實際上,後台即是將其作為類處理) ;

2.事件,規範了其型別(委託型別);

綜上之,之所以介面不能包含委託,而介面為什麼可以包含事件呢?

因為委託是一種與類同等地位的特殊型別(類的例項是儲存資料的託管記憶體空間,而委託則只有方法位址而已),故介面不能包含委託;事件從地位上不與類、介面同一層次,事件的獨特機制使得事件可以是乙個介面的標準組成部分,只要繼承的類包含乙個public事件成員;(看樣要想說明白,還要將事件講述更清楚些,呵呵~)

附:附加版

如上文所述,事件一般都是應用在諸如windows form這樣的事件驅動環境中。具體例子可見上述按鈕觸發事件自動生成的**。然而對事件而言,我們自己也可以定義事件的,見下例:1//

description: 通過自定義事件,了解自定義事件使用方法23

//45

//notes: 為簡便,將自定義事件的定義,和驗證**放於一起67

8namespace

selfdefinitionevent922

set23}24

public

void

invoked()

2529}30

class

program

3136

static

void

main(

string

args)

3745}46

}47最後結果為:

從上例,可以看到自定義事件的從定義、賦值、使用等個部分的方法,也可以加深對事件的了解。

LTE網路主要介面包含資訊概述

介面型別 包含主要資訊 uu信令面 使用者面1 rrc信令訊息 2 測量報告 3 廣播訊息 4 異常流程 x2信令面 使用者面1 inter enb 切換 2 enb直接交換無線質量測量資訊 s1 mme 信令面1 上下文資訊 ip位址 ue能力等 2 使用者身份資訊 imsi或tmsi guti等...

C 做的登入介面包含驗證碼

登入介面如下所示 using system using system.collections generic using system.componentmodel using system.data using system.drawing using system.linq using syst...

學了這麼久UI,你還不知道UI設計介面包含哪些?

那麼下面將會給大家介紹幾種最常見 最流行的移動端ui設計介面,並展示他們不同的設計特點,學以致用,開啟創意思維。常見的幾種ui設計介面 啟動頁 為了確保啟動頁在各個不同解析度的螢幕上適配良好,ui視覺設計師們常常會把它們放在螢幕的中間位置或者底部位置。首頁和選單欄介面 首頁的設計取決於產品的型別,它...