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