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

來源:互聯網
上載者:User

我工作過的許多公司在選擇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應用程式,你只是丟失了一些對你有用的類罷了。”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.