C# OOP技術(shù) 接口
接口是把公共實例(非靜態(tài))方法和屬性組合起來,以封裝特定功能的一個集合。一旦定義了接口,就可以在類中實現(xiàn)它。這樣,類就可以支持接口所指定的所有屬性和成員。
注意,接口不能單獨存在。不能像實例化一個類那樣實例化接口。另外,接口不能包含實現(xiàn)其成員的任何代碼,而只能定義成員本身。實現(xiàn)過程必須在實現(xiàn)接口的類中完成。
可以把通用的屬性和方法,例如AddSugar()、Milk、Sugar和Instant組合到一個接口中,這個接口可以命名為MotDrink(接口名一般以大寫字母I開頭)。然后就可以在其他對象上使用該接口,例如QipOfTea類的對象。所以可以采用類似方式處理這些對象,而對象仍保留自己的屬性(例如CupOfCoffee仍有屬性 BeanType,CupOfTea 仍有屬性 LeafType)。
在UML中,在對象上實現(xiàn)的接口用“棒棒糖”語法來表示。在下圖中,采用與類相似的語法把IHotDrink的成員放在一個單獨的框中。
—個類可支持多個接口,多個類也可支持相同的接口。所以接口的概念讓用戶和其他開發(fā)人員更容易理解其他人的代碼。例如,有一些代碼使用一個帶某接口的對象。假定不使用這個對象的其他屬性和方法,就可以用另一個對象替代這個對象(例如,使用上述IHotDrink接口的代碼可以處理CupOflCoffee和CupOfTea實例)。另外,該對象的開發(fā)人員可以提供該對象的更新版本,只要它支持己經(jīng)在用的接口,就可以在代碼中使用這個新版本。
發(fā)布接口后,即接口可以用于其他開發(fā)人員或終端用戶后,最好不要修改它。理解這一點的一種方式是把接口看成類的創(chuàng)建者和使用者之間的協(xié)定,即“每個支持接口X的類都支持這些方法和屬性”。如果以后修改了接口,也許是升級了底層的代碼,該接口的使用者就不能正確運行接口,甚至失敗。所以,我們應(yīng)做的是創(chuàng)建一個新接口,使其擴(kuò)展舊接口,可能還包含一個版本號,如X2。這是創(chuàng)建接口的標(biāo)準(zhǔn)方式,以后我們會常遇到己編號的接口。
可刪除的對象
IDisposable接口特別有趣。支持Disposable接口的對象必須實現(xiàn)Dispose()方法,即它們必須提供這個方法的代碼。當(dāng)不再需要某個對象(例如,在對象超出作用域之前)時,就調(diào)用這個方法,釋放重要資源,否則,等到對垃圾回收調(diào)用析構(gòu)方法時才會釋放該資源。這樣可以更好地控制對象所用的資源。
C#允許使用一種可以優(yōu)化使用這個方法的結(jié)構(gòu)。using關(guān)鍵字可在代碼塊中初始化使用重要資源的對象,在這個代碼塊的末尾會自動調(diào)用DisposeO方法,用法如下:
<ClassName> <VariableName> = new <ClassName> ();
...
using (<VariableName>)
{
…
}
或者可以初始化對象<VariableName>,作為using語句的一部分:
using (<ClassName> <VariableName> = new <ClassName>())
{
…
}
這兩種情況下,可在using代碼塊中使用變量<VariableName>,并在代碼塊的末尾自動刪除(在代碼塊執(zhí)行完畢后,調(diào)用Dispose())。
點擊加載更多評論>>