Transcript Slide 1
VB.NET The most powerful language for developer 昇級Visual Basic 技術到 Visual Basic. NET 高文雄 台灣微軟 特約資深講師 .NET技術 專欄/自由作家 講師簡介 現任: 源碼科技 台灣微軟 技術長 特約資深講師 曾任: 科技島股份有限公司 專案開發部門 經理 資訊技術部門 副理 專長: 主從式架構、多層式應用程式架構設計、 資料庫理論、系統分析、專案管理。 經歷: MCSD、 MCSE、 MCDBA、 MCPS。 Visual Studio.net 上市發表會--特約講師 微軟大型技術研討會--特約講師。 自由作家/譯者 專案開發經理 取得聯繫的方式: [email protected]. 議程大綱 VB6 、VB.NET語言的差異 VB.NET新功能介紹及範例 昇級現有的 VB 6 專案程式 VB6 v.s VB.NET 資料型態 使用變數 副程式與函式 例外處理 物件方式 資料型態 Common Type System VB.NET 新增的資料型態類型 VB.NET 與VB6 不同的資料型別 使用Ctype 轉換不同的資料型別 Common Type System 1/2 所有.NET語言的共通型別系統 提供型別安全(Type-Safety) 建立在System.Object Class (.NET Framework Class Library) 實值型別 vs. 參考型別 (Value-Type vs. Reference-Type Variables) Common Type System 2/2 VB.NET 新的資料型態 New Data Type Storage Size Value Range 2 bytes 0-65535 Short 2 bytes -32768 至32767 Decimal 12 bytes 28digits(包含小數點 前後) Char VB.NET與VB6不同的資料型別 VB6 Integer(16bit) Long(32bit) VB.NET Short Integer Long(64bit) Variant Not Supported: use Object Currency Not Supported: use Decimal String(fixed length) Not Supported 資料型態轉換 VB6的資料型態轉換方式 CInt()、 CStr()、… 使用新的Ctype() 轉換方式 語法:Ctype(expression, type_name) 物件的資料型態轉換方式 s=i.toString i=Integer.Parse(s) 型態轉換--範例 VB 6 Dim i as integer,s as string i=10 s=Cstr(i) VB.NET Dim i as integer, s as string i=10 s=Cstr(i) ‘VB6延用的使用方式 s=Ctype(i,string) ‘CType的使用方式 s=i.ToString ‘物件的使用方式 i=Integer.Parse(s) ‘字串轉數字 使用變數 宣告及初始化變數(及陣列) 變數範圍 建立 Data Structures 編譯選項設定 使用Shorthand 方式指定變數值 宣告及初始化變數 同步宣告及初始化變數 Dim x as integer = 10 多個變數宣告 Dim x , y, z as integer 宣告陣列 陣列的基底為 0 不能指定 lower bound To upper bound方式 Redim陣列 陣列使用--範例 1/2 VB 6 Dim month(1 to 6) as Integer VB.NET Dim month(5) As Integer ‘0,1,2,3,4,5 共6個註標 ‘Length=6 ‘Upper Bound=5 Dim month() As Integer = {1, 2, 3, 4, 5, 6} 陣列使用(Redim) --範例 2/2 VB6 Dim x () as string ‘在vb6 正確的Redim方式 ReDim x(5)as string Dim y (2) as string ‘在vb6 錯誤的Redim方式 ReDim y(5) as string VB.net Dim x () as string ‘在vb.net正確的Redim方式 ReDim x(5)as string Dim y (2) as string ‘在vb.net 允許的Redim方式 ReDim Preserve y(5) as string 變數範圍 Procedure Scope --在整個程序中變數都是可見的 Block Scope --適用在If … Else … End If, For … Next, Do … Loop, While … End While, Select … Case … End Select 變數範圍--範例 Sub AddTen() Dim I as integer ‘Procedure Scope ‘變數只有在區塊中是可見的 For i= 0 to 10 dim x as integer x=i Next Msgbox(i.ToString) Msgbox(x.ToString) End Sub ‘Block Scope ‘成功,變數在程序範圍內 ‘錯誤, 變數已超出範圍外 建立 Data Structures Data Structures 取代VB6的使用者自 訂型態(UDT)功能 Data Structure--範例 VB 6.0 Private Type myCustomer Name As String Address As String Age As Integer End Type VB .NET Structure myCustomer Dim Name As String Dim Address As String Dim Age As Integer End Structure 編譯選項設定 Option Explicit (default on 指定變數必須經過宣告) Option Strict On:不允許物件進行「晚期連結」 Off:可以允許物件的「晚期連結」 Default: Strict off Option Strict—範例 VB.NET Option Strict on ‘不允許物件進行「晚期連結」 …略 Dim x as object X=“1234” Msgbox(x.chars(3) ) ‘錯誤,string物件的chars方法只有在 ‘ run-time時期可視,在Strict on情況 ‘ 不允許物件進行 Late binding. 使用Shorthand 方式指定變數值 簡化變數指定運算式: *= /+ += -= &= 使用Shorthand ---範例 Dim z as integer =0 Dim s as string =“First” z += 1 ‘z= z+1 s &= “Second” ‘s= s & “Second” 副程式與函式 不論是否有回傳值都必須使用括號()帶入函 式的參數值 引數預設是「傳值(byVal)」 選項參數(Optional)必須有預設值 使用return 回傳Function 的回傳值 Option Parameter—範例 VB 6.0 : Function add(Optional ByVal X as integer)As Integer If IsMissing(X) Then … End Sub VB .NET : Function add(Optional ByVal X As Integer = 0) … End Function As Integer Return回傳值---範例 VB6 Function getData () as string …略 getData=“Result Data” End Function VB.NET Function getData () as string …略 getData=“Result Data” ‘或者是 Return “Result Data” End Function 使用參數陣列(ParamArrays) VB .NET 中的 ParamArrays 參數 使用 ByVal 傳遞( VB 6.0 是 ByRef ) 可以為任何型態( VB 6.0 是 Variant ) 不可以與 Optional 共用 參數陣列---範例 Sub Test(ByVal ParamArray X( ) As Object) Dim I As Integer For I = X.GetLowerBound(0) To X.GetUpperBound(0) MsgBox(X(I)) Next End Sub 例外處理(一) 結構化的例外處理機制 使用 Try…Catch 捕捉錯誤訊息 System.Exception Class 提供產生例外的相關訊息 (ex:Message,Source…) Throw 例外 例外處理---範例 2/2 Try...Catch Dim i1, i2, i3 As Decimal i1 = 22 i2 = 0 Try i3 = i1 / i2 MsgBox(i3.ToString) Catch eExcption As Exception MsgBox(eExecption.Message) Finally MsgBox("the end") End Try 例外處理—範例 2/2 Throw 例外 …略 Try If i2 = 0 Then Throw New Exception("i2 equals zero") Else Throw New Exception("i2 does not equal zero") End If Catch eException As Exception MsgBox("Message: " & eException.Message) Finally MsgBox("finally block") End Try 物件使用 物件指派方式 VB 6.0: Set objX = TextBox1 VB .NET: objX = TextBox1 大多數物件不再支援「預設屬性」功能 VB 6.0 : TextBox1 = “1234” VB .NET: TextBox1.Text = “1234” Visual Basic.NET 新功能 主要的語言功能加強 完整「Object-Oriented 提供「Structured Programming」 exception handling」 與.NET Framework 整合能力 開發Multithreaded Garbage Collection 提供Web 應用程式開發能力 Web Forms Web Services 表單繼承 為你的應用程式建立基礎表單 繼承「基礎表單」並加入新功能 基礎表單修改時所有的子表單一併修改 加速應用程式開發以及簡化共通程式設計 表單繼承 基礎表單 繼承表單 Multithread .NET Framework 提供新的類別功能 System.Threading.Thread 使用Start方法開始一個Thread物件 使用Abort方法結束一個Thread物件 使用Priority屬性設定Thread執行順序 Multithreaded 昇級現有的 VB 6 專案程式 1/3 昇級前的準備 將VB1 至VB5專案無法直接昇級VB.NET -必須先昇級到VB6的專案型態 以ADO取代RDO、DAO資料存取方式 -ADO.NET不支援RDO、DAO的data binding to controls,data controls,或者是RDO 的User Connection Notes:DHTML、ActiveX Document等VB6專案型態無法昇級至VB.NET(但可以 共存)。另外,建議將不需要進行Distributed Transactions的 COM/COM+ 元件 以手動的方式昇級成為Web Service 元件型式(.NET middle-tier Component) 昇級現有的 VB 6 專案程式 2/3 建議在VB6中進行程式碼修改的部份 物件以Early-Binding取代Late-Binding 「日期型態」資料改以date資料型態定義 -不要使用Double資料型態;VB.NET不支援Date/Double兩 者之間直接進行資料轉換的動作 避免使用物件的「預設屬性」設計方式 -特別是當物件是使用late-binding時會造成在VB.NET的編 譯錯誤 修改不適合的陣列 宣告/使用 方式 -Dim x (1 to 6) as integer (修正為 Dim x(6) as integer) -取消任何Option Base 1的編譯選項設定 昇級現有的 VB 6 專案程式 3/3 使用昇級精靈 建立一個新的VB.NET專案 -原有的VB6專案會被保留 將VB6的表單、類別物件更換為新 的.NET 物件 -VB6 Forms 將轉換為Windows Forms 在新的專案中建立昇級報告 -詳列出所有可能的錯誤或未完成昇級的部份 使用昇級精靈 總結 使用VB.NET新的語言能力 Object Oriented Programming 充分理解.NET Framework 應用Base Class library 昇級你的VB6應用程式專案 使用昇級精靈 相關資訊 MSDN(美國微軟) htt://msdn.microsoft.com http://msdn.microsoft.com/net MSDN(台灣「技術開發人員社群」網站) http://www.microsoft.com/taiwan/msdn/communit Question