使用 EmptyClass 避免條件判斷

2021-08-22 01:57:27 字數 929 閱讀 7895

在習慣了使用基於介面的程式設計之後,經常會遇到這樣的問題,比如,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...