使用VB.NET開發純.NET的應用程序

我工作過的許多公司在選擇VB.NET作爲他們的核心開發工具時都經歷了一個長時間的抉擇,他們所關心的最主要的問題之一是如果他們不使用C#語言就不能開發出純.NET框架代碼。主要有兩個原因使他們得出這樣的結論:首先,由於VB(6.0或早期版本)運行時的限制,VB在開發COM構件的能力方面不如C語言功能強大,他們關心這些限制是否在.NET中依舊存在;再者,由於微軟提倡將C#作爲在.NET平臺上的主要開發工具,很多VB開發者懷疑微軟是否已經在VB.NET改進了VB先前版本的功能。  

有個客戶曾經跟我提起過這個問題,還特意請求我幫助他的公司在不依賴VB6中的任何功能時如何使用VB.NET作爲純.NET開發語言。當我問他爲什麼他認爲VB.NET不是純.NET開發語言時,他告訴我他最近將一個項目從VB6升級到VB.NET時,他在VB.NET中看到有很多象Imports Microsoft.VisualBasic和Imports Microsoft.VisualBasic.Compatibilit的輸入語句,這些語句表明了VB.NET依舊在使用早期VB版本的一些功能;他說“如果VB.NET是.NET環境中一流的開發語言,爲什幺還要用到早先VB版本中的功能呢?”。爲了回答他的這個問題,並且給VB.NET的開發者提供一個如何使用這些包的建議,我將在此文章中解釋爲什麼微軟還在.NET平臺中實現VB早期版本的中的一些功能的原因。

VB中的核心動態鏈接庫(DLL)

將核心VB語言建造到.NET框架的方式同C#一樣,主要的區別是微軟爲VB的開發者將兩個附加的庫增加到.NET中。首先,Microsoft.VisualBasic是.NET中可重新分發包的一個重要組成部分,它是VB早期版本的功能在.NET中的一個實現,同時兩者也有一些細微的差別。實際上,有些VB函數(尤其是類型轉換部分的函數)比.NET的通用語言運行時(CLR)所提供的對象有着更好的性能。例如,使用CInt()就比使用Convert對象要好;另外,有些VB函數替你做了一些額外的工作,例如,函數CStr()在轉換字符串時也自動進行了區域性方面的處理,如果你用Convert對象就必須自己做這些額外的工作。

同時.NET中的庫也提供了VB開發者原來經常使用的一些通用環境常量,例如,vbCrLf回車換行符。其實如果你不想使用原來的老式常量,你能使用System.Environment.Newline方法或System.Convert.ToChar(13)&System.Convert.ToChar(10)來得到同樣的常量。象vbCrLf這樣的常量引用在.NET中直接被映像到框架底層的調用,所以在性能方面應該沒有什麼影響。像上面這種情況,編譯器將它優化成單個字符串,如果它是一個變量,它就直接被映像到rn,將它翻譯成一個回車換行符。VB早期版本的函數也直接被映像到.NET框架底層的調用,象msgbox語句直接映像成.NET框架中的MessageBox,這種情況由於兩者編譯完了以後生成的中間語言(IL)基本上是相同的,所以在性能方面幾乎沒有什麼影響。

在VB早期版本中的有些特性,象函數InputBox、控制數組和對ADO的支持在.NET框架中的沒有直接的等同物。但是對於這些不能直接支持的特性,微軟提供了另外一個名爲Microsoft.VisualBasic.Compatibility的庫,這個庫是爲使VS.NET具有向下兼容性而提供的,所以如果你的VB應用程序沒有升級一定不要使用其中的功能。Microsoft.VisualBasic.Compatibility包含對控制數組、環境函數和字體轉換的支持。微軟所提供的另外一個名爲Microsoft.VisualBasic.Compatibility.Data庫可以支持ADO對象、接口和方法,使用這個庫可以象早期VB版本中的ADO一樣來操縱數據庫。關於是否應該花費時間和精力來學習這些老版本中的功能,你應該留意一下VS.NET幫助文件的警告信息。

“警告:當你用Visual Basic.NET開發.NET應用程序時,最好不要使用VisualBasic.Compatibility命名空間中所提供的功能,將來的VB版本可能不再支持此命名空間,使用.NET中別的命名空間所提供的相同功能的函數和對象。”

由此可見,在使用VB.NET時,你應該注意可以使用VB早期版本中的那些功能,不可以使用那些功能,不可使用的部分.NET中別的包中都提供了相同的功能。清楚這些以後,這樣你既可以使用VB早期版本中的一些功能,又可以開發純.NET應用程序。所以,你大可不必爲創建純.NET應用程序放棄在VB上的多年的培訓投資和實踐經驗而使用C#,因爲VB.NET同樣可以利用.NET框架提供給C#的所有功能。實際上,我曾經向我的客戶推薦不要使用微軟提供的升級嚮導,因爲該向導在升級過程中會將.NET中所提供的向下兼容的庫增加到.NET項目中,所以應該直接構造.NET應用程序,然後將原來應用程序中的代碼移植到新應用程序中,用.NET新的功能替代不被.NET支持的老式功能,這樣開發出的應用程序將是純.NET應用程序。

Microsoft.VisualBasic支持純.NET應用程序

Microsoft VisualBasic是VB語言自身在.NET框架中的實現,它所提供的功能是真正基於.NET的,而不僅僅是爲了與VB早期版本的兼容。在VS.NET項目中的那些關於Microsoft.VisualBasic的Imports語句不會在性能方面造成什麼影響,主要作用是當你用到相關功能後,它會告之編譯器在什麼地方可以找到調用的代碼。

.NET框架會長期保留Microsoft.VisualBasic包,並且總是可以被重新發布。正如VB.NET產品組的一個成員所說,“你並不能因爲刪除Microsoft.VisualBasic.dll而獲得什麼,這個動態鏈接庫中的功能並不是VB早期版本所遺留下來的,它們在VB.NET中已經被重新實現了,並且被VB的開發者所熟知,具有向前兼容性,所以使用它不會對應用程序有什麼危害。最後,如果你重用VB例子中的代碼,你也會用到這些功能。刪除這個動態鏈接庫並不能使你開發更純的.NET應用程序,你只是丟失了一些對你有用的類罷了。”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章