從 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 的好感打一折。 這陷阱對初學者來說有點大。
沒有留言:
張貼留言