Visual Basic.NET 中的語言新變化
簡介要快速建立企業級的Web應用程式,開發人員必須依賴於延展性、強壯性和可重用性等商業邏輯。在過去的幾年中,物件導向的程式設計成為符合這些要求的系統的首要方法。使用物件導向的程式設計語言有助於使大規模的系統更易於理解、更易於調試、升級更迅速。為了使Visual Basic開發人員能夠從物件導向設計中受益並簡化企業級Web應用程式的開發,Visual Basic的下一個版本——Visual Basic.NET將支援包括實現繼承在內的全部物件導向的語言特性。有了這些語言特性,Visual Basic.NET將具有快速開發企業級關鍵應用所需要的所有能力,同時保持使其成為世界上最流行的開發工具的直接存取性。Visual Basic.NET提供了一流的物件導向的程式設計語言特性,諸如實現繼承、重載和參數化的構造器。此外,開發人員可以通過顯式的自由線程編寫具有高度延展性的代碼,同時通過其它現代化的語言概念如結構化的異常處理等編寫具有較高可維護性的代碼。Visual Basic.NET將提供開發人員建立強壯、可伸縮的分布式Web應用所需要的所有語言特性:
新增的物件導向編程特性l 繼承l 重載l 參數化的構造器
其他的現代化的語言特性l 自由線程l 結構化的異常處理l 嚴格類型檢查l 共用成員l 初始化設定
語言更新的曆史Visual Basic語言有很長的更新歷史,這與Windows平台的基本性變化是相關的。例如:對QuickBasic的顯著改變是支援Windows3.0的GUI開發併產生了第一個版本的Visual Basic。在Visual Basic4.0中向基於COM編程的轉變產生了建立DLL的語言概念。在Visual Basic5.0中,其語言發展到支援COM控制項的建立。隨著每一次連續的修改,Visual Basic的流行程度越來越高。新Visual Basic物件導向的語言特性為開發人員提供了建立企業級Web應用程式的能力,這必將延續這種趨勢。
物件導向的程式設計在傳統的結構化程式設計中資料存放區分離與程式碼,這存在著一些弊端。所有的代碼被書寫成結構化的,而不是模組。因為資料元素可以從任何代碼中訪問,它可能在開發人員不知道的情況下別修改。這可能會導致非常難於調試的執行階段錯誤。此外,程式維護可能成為一項重要的任務。理解結構化編程中修改一行代碼所造成的全域影響是非常困難的。最後,依賴於開發人員控制碼和資料結果會導致較低的可重用性。物件導向的程式設計(OOP)解決了這些問題,它將資料和在其上實施的方法封裝成一個獨立的單元,叫做對象。一個對象的資料可以隱藏以防止未經授權的修改。此外,對象公開一組可以在資料上進行操作的公用方法。這種概念叫做封裝。由於實現細節和介面相分離,底層的編程邏輯可以在後期改變而不必擔心破壞調用對象的代碼。OOP還允許開發人員通過繼承同時重用代碼和資料。通過從先前確定的對象中繼承,開發人員可以更迅速地構造複雜的應用程式。由於編寫新的代碼總是會有帶入錯誤的潛在可能,重用經過測試的代碼可以使產生額外錯誤的可能性達到最小。為了適應這些需要,Visual Basic.NET將提供一些新增的語言特性,這些特性可以使其擁有以上所描述的種種益處,使其成為一流的物件導向的程式設計語言。
繼承一直以來對Visual Basic特性的要求中呼聲最高的就是對繼承的支援。在Internet時代的開發要求快速地組裝和大量的重用。Visual Basic現在完全實現繼承,包括可視化表單的繼承。開發人員可以使用新的關鍵字Inherits從一個已存在的類中派生。Class1Function GetCustomer()...End FunctionClass2Inherits Class1Function GetOrders()...End Function繼承語句支援所有與繼承相關的性質。衍生類別的執行個體支援所有基類所支援的方法和介面。當然,衍生類別可以擴充基類所支援的方法和介面的集合。衍生類別可以使用Overrides關鍵字來替代基類中定義的方法。為減少編程錯誤,Visual Basic會防止意外的替代一個函數。只有聲明為“可替代”的函數被允許在衍生類別中被替代。
重載Visual Basic現在允許函數重載,這使開發人員具有建立一個擁有相同名稱,但參數類型不同的過程或函數的能力。當物件模型中規定了要使用名稱相近但操作於不同類型的資料之上的過程時,繼承尤其有用。例如:一個可能表現為幾種不同資料類型的類可以有這樣一個Display過程:Overloads Sub Display (theChar As Char)...Overloads Sub Display (theInteger As Integer)...Overloads Sub Display (theDouble As Double)如果沒有繼承,你就需要為每個過程使用不同的名稱或使用Variant參數。重載提供了一種更為清晰、更為有效方法來處理多種資料類型。
參數化的構造器參數化的構造器(或簡稱為“構造器”)允許建立一個類的新執行個體的同時向這個執行個體傳遞參數。構造器對於物件導向的編程來說是必需的。因為它允許使用者定義的構造代碼通過執行個體的建立者傳遞參數。它們通過允許一個新的對象執行個體在一個單獨的運算式中建立並初始化以簡化客戶機程式的代碼。
其他的現代化語言特性Visual Basic.NET增加了一些簡化具有強壯性和延展性應用開發的新概念。這些特性包括自由線程、結構化的異常處理、嚴格的型別安全等以及諸如初始化設定和共用成員等能夠提高生產率的新特性。
自由線程現在當開發人員在Visual Basic中建立應用程式時,他們所編寫的代碼是同步的。這意味著每行代碼要在下一行代碼之前執行。開發Web應用程式的時候,延展性是關鍵。開發人員需要是平行處理成為可能的工具。通過自由線程,開發人員可以產生一個線程來完成一些已耗用時間長的任務、執行一個複雜的查詢或運行一個多部分的計算,而應用程式的其它部分繼續執行,提供了非同步處理。Sub CreateMyThread()Dim b As BackGroundWorkDim t As ThreadSet b = New BackGroundWork()Set t = New Thread(New ThreadStart(AddressOf b.Doit))t.StartEnd SubClass BackGroundWorkSub DoIt()...End Sub End Class
結構化的異常處理開發企業級的應用程式要求建立可重用的、可維護的組件。在過去的Visual Basic版本中,Basic語言的一個具有爭議的方面是其對錯誤處理的支援。開發人員已經發現一致的錯誤處理方案意味著大量的賦值代碼。利用現存的On Error Goto語句的錯誤處理方法有時會減緩大規模應用程式的開發和維護。其叫法就反映出這樣一些問題:如Goto所意味的,當一個錯誤發生時,控制權轉移到子程式中一個有標記的位置。一旦錯誤碼運行,它必須時常通過另外的清除位置來轉向,而後者又要經過一個標準的Goto,最後還是要通過其他的Goto或Exit來退出過程。使用Resume和Next的多種組合來處理幾個不同的錯誤將會產生難以讀懂的代碼並且在執行路徑沒有被完全考慮到的時候會導致頻繁的錯誤。利用Try...Catch...Finally,這些問題將不複存在,開發人員可以嵌套其異常處理,同時這是一種用於編寫在正常條件和異常條件下執行清潔代碼的控制結構。Sub SEH() Try Open "TESTFILE" For Output As #1 Write #1, CustomerInformationCatch Kill "TESTFILE"Finally Close #1End tryEnd Sub
嚴格的類型檢查當前的Visual Basic語言在其可能產生隱式的類型強制轉換上是非常自由的。對於賦值和除了引用方式之外的參數傳遞,Visual Basic編譯器可以允許幾乎任何一種資料類型通過發生運行時強制類型轉換向其他資料類型轉換。如果要轉換的值不能在沒有資料損失的情況下被轉換,那麼運行時的強制轉換可能會失敗。通過增加一個新的編譯選項,Visual Basic可以對任何可能在運行時發生錯誤的轉換產生編譯時間錯誤。選項Strict通過在要求一個可能在運行時失敗的轉換或諸如在數字類型和字串之間的在使用者預期之外的自動轉換時產生錯誤來改善型別安全。
共用成員共用成員是指由類的所有執行個體所共用的資料和函數成員。在類的所有執行個體中共用一個資料成員或函數的單個執行個體是使用繼承的Visual Basic應用程式所需要的。一個共用資料成員獨立地存在於類的每個執行個體中。共用方法不同於普通的方法,它並不是隱式的傳遞類的一個執行個體。由於這個原因,在共用方法中對非共用資料成員的無限制引用是不允許的。共有的共用成員可以被間接地訪問,而且它們可以從類的執行個體後期綁定。
初始化設定Visual Basic.NET支援在變數的聲明行中對其初始化。初始化設定可以在包括控制結構的任何地方使用。含有初始化設定的過程級聲明的語義與一個聲明語句後緊跟一個指派陳述式是相同的。換句話說,語句Dim X As Integer=1與Dim X As IntegerX=1是相同的。
結束語Visual Basic現在是一流的物件導向程式設計語言,使用Visual Basic.NET,開發人員可以通過顯式的自由線程建立高度可伸縮的代碼。他們所編寫的代碼增加了如結構化異常處理等現代化語言概念的使用,將具有很高的可維護性。Visual Basic將為開發人員建立強壯的、可伸縮的分布式Web應用提供所需要的一切語言特性。