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 的好感打一折。 這陷阱對初學者來說有點大。

沒有留言:

張貼留言