2015年11月8日 星期日

設計模式: Singleton

用來確保同一Process裡只會有共同的一個 instance,可以用來放共用變數、共用方法、共用的資源,避免 race condition。

簡述實作的步驟

singleton
1. hide constructor
2. private instance to avoid accessing the instance directly
3. public static getInstance() to create or get instance
4.
  a. check the instance is not null
  b. lock
  c.if null then create
  else return instance


2015年11月5日 星期四

VB .Net 擴充方法的陷阱 (Trap in VB .Net about extension method)

從 C# 開始就很喜歡 .Net 擴充方法 (Extension method),

感覺像是物件的 plugin,提升敲鍵盤寫Code的流暢感,結合開發系統的特性,痛快。

因為工作需要轉到VB .Net 當然也要繼續建造自己的擴充方法集。

可是遇到了一個問題,讓我對 VB .Net 更是敬而遠之。


起因是這樣,我寫個泛型的擴充方法讓每個物件都可以使用,像是 ToString() 之類的。

正當沾沾自喜之際,執行時遇到找不到這個擴充方法的錯誤訊息,

而且只有 Object 才會這樣。


參考一些網路上的文章,似乎跟 VB .Net late binding 特性有關。

reference: Extension methods and late binding

原因就不細追了,總之Object's 擴充方法無法使用,可以順利編譯,但是執行時會報錯。


但是之所以用泛型,就是不確定前面的物件是什麼呀!

而且原意是希望任何物件都可以使用這擴充方法。

難不成要禱告使用這擴充方法時不要遇到Object。  Orz

Oh no... 馬上對 VB .Net 的好感打一折。 這陷阱對初學者來說有點大。