位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# OOP技術(shù) 接口

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

    接口是把公共實(shí)例(非靜態(tài))方法和屬性組合起來,以封裝特定功能的一個(gè)集合。一旦定義了接口,就可以在類中實(shí)現(xiàn)它。這樣,類就可以支持接口所指定的所有屬性和成員。

    注意,接口不能單獨(dú)存在。不能像實(shí)例化一個(gè)類那樣實(shí)例化接口。另外,接口不能包含實(shí)現(xiàn)其成員的任何代碼,而只能定義成員本身。實(shí)現(xiàn)過程必須在實(shí)現(xiàn)接口的類中完成。

    可以把通用的屬性和方法,例如AddSugar()、Milk、Sugar和Instant組合到一個(gè)接口中,這個(gè)接口可以命名為MotDrink(接口名一般以大寫字母I開頭)。然后就可以在其他對(duì)象上使用該接口,例如QipOfTea類的對(duì)象。所以可以采用類似方式處理這些對(duì)象,而對(duì)象仍保留自己的屬性(例如CupOfCoffee仍有屬性 BeanType,CupOfTea 仍有屬性 LeafType)。

    在UML中,在對(duì)象上實(shí)現(xiàn)的接口用“棒棒糖”語法來表示。在下圖中,采用與類相似的語法把IHotDrink的成員放在一個(gè)單獨(dú)的框中。

image.png

    —個(gè)類可支持多個(gè)接口,多個(gè)類也可支持相同的接口。所以接口的概念讓用戶和其他開發(fā)人員更容易理解其他人的代碼。例如,有一些代碼使用一個(gè)帶某接口的對(duì)象。假定不使用這個(gè)對(duì)象的其他屬性和方法,就可以用另一個(gè)對(duì)象替代這個(gè)對(duì)象(例如,使用上述IHotDrink接口的代碼可以處理CupOflCoffee和CupOfTea實(shí)例)。另外,該對(duì)象的開發(fā)人員可以提供該對(duì)象的更新版本,只要它支持己經(jīng)在用的接口,就可以在代碼中使用這個(gè)新版本。

    發(fā)布接口后,即接口可以用于其他開發(fā)人員或終端用戶后,最好不要修改它。理解這一點(diǎn)的一種方式是把接口看成類的創(chuàng)建者和使用者之間的協(xié)定,即“每個(gè)支持接口X的類都支持這些方法和屬性”。如果以后修改了接口,也許是升級(jí)了底層的代碼,該接口的使用者就不能正確運(yùn)行接口,甚至失敗。所以,我們應(yīng)做的是創(chuàng)建一個(gè)新接口,使其擴(kuò)展舊接口,可能還包含一個(gè)版本號(hào),如X2。這是創(chuàng)建接口的標(biāo)準(zhǔn)方式,以后我們會(huì)常遇到己編號(hào)的接口。


可刪除的對(duì)象

    IDisposable接口特別有趣。支持Disposable接口的對(duì)象必須實(shí)現(xiàn)Dispose()方法,即它們必須提供這個(gè)方法的代碼。當(dāng)不再需要某個(gè)對(duì)象(例如,在對(duì)象超出作用域之前)時(shí),就調(diào)用這個(gè)方法,釋放重要資源,否則,等到對(duì)垃圾回收調(diào)用析構(gòu)方法時(shí)才會(huì)釋放該資源。這樣可以更好地控制對(duì)象所用的資源。

    C#允許使用一種可以優(yōu)化使用這個(gè)方法的結(jié)構(gòu)。using關(guān)鍵字可在代碼塊中初始化使用重要資源的對(duì)象,在這個(gè)代碼塊的末尾會(huì)自動(dòng)調(diào)用DisposeO方法,用法如下:

<ClassName> <VariableName> = new <ClassName> ();

...

using (<VariableName>)

{

  …

}

或者可以初始化對(duì)象<VariableName>,作為using語句的一部分:

using (<ClassName> <VariableName> = new <ClassName>())

{

  …

}

這兩種情況下,可在using代碼塊中使用變量<VariableName>,并在代碼塊的末尾自動(dòng)刪除(在代碼塊執(zhí)行完畢后,調(diào)用Dispose())。


繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部