在習慣了使用基於介面的程式設計之後,經常會遇到這樣的問題,比如,b元件需要使用實現了ia介面的a元件,但是如果在沒有a元件的情況下b元件也可以正常工作,像這樣:
public
inte***ce
iapublic
class
b:ib
public
void
dojob()
}public
void
dootherjob()}}
可以看到很多地方都要用到if(
this
.thea
!=null
)進行條件判斷,如果某個地方露掉了這樣的判斷,執行時可能就會丟擲「引用為空」的異常。有沒有辦法來徹底避免類似的條件判斷了?有,那就是emptyclass的目的。emptyclass實現了比如上述的ia介面,但是emptyclass什麼都不做,即emptyclass完全由vs.net的智慧型感知自動生成(宣告emptyclass時,在寫完介面名後按tab鍵)。
我們看看自動生成的ia對應的emptyclass:
public
class
emptya:ia
public
void
dowork2()
#endregion}
現在就可以在b中來避免前面的條件判斷了:
public
class
b:ib
}public
void
dojob()
public
void
dootherjob()}
這個簡單的小技巧,你一定已經學會了:)
在當乙個元件對另乙個元件的引用可以為空的時候,emptyclass的例項就可以作為這個引用的預設值,這樣不僅沒有犧牲效能(空方法呼叫與條件判斷的開銷差不多),而且使得我們的**更漂亮、更容易閱讀和維護。
避免使用vector bool
作為乙個stl容器,vector僅僅有兩點不正確。首先。它不是乙個stl容器。其次,它並不儲存bool。除此之外。一切正常。乙個物件要成為容器,就必須滿足c 標準中列出的全部條件。當中乙個條件是,假設c是包括物件t的容器,並且c支援operator,那麼以下的 必須可以被編譯 t p c 0 換句話...
10 避免使用with
程式經常需要對單個物件依次呼叫一系列方法。function status info 複製 function f x,y 複製 變數作用域和物件命名空間之間的衝突使得with 塊異常脆弱。error status connecting status connecting widget.prototyp...
有效避免使用遞迴
例項 自動化指令碼管理工具,資料儲存在伺服器,讀到客戶端後,需要建立乙個資料結構,從上到下順序為 folder object control operation parameter folder object operation parameter folder case caseprocess p...