Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)

vbscript|visual

因為未來微軟 .NET 平台的執行環境與現今大大的不同,未來 Class 可以跨語言地繼承,也就是 VB 可以繼承 C# 的 Class 等等。原始程式碼編譯成 Managed Code,平台提供執行時期將 IL 編譯成執行碼等等。在再讓 VB 必須要脫胎換骨。所以 Visual Basic.NET 將會有絕大的改版,與以往的六個版本截然不同。

Visual Basic.NET 與以往的版本實在差別太多,在這裡無法一一詳述。僅列舉明顯且重用的部分。 < Visual Basic 6 與 Visual Basic.NET 差異的部分 >以下先介紹 VB6/Visual Basic.NET 都有的部分,但 Visual Basic.NET 改變使用方式或關鍵字更新。內容有

  • 不再使用 Set 和 Let
  • Class 的屬性撰寫
  • Subroutines 和 Functions
  • 完整的資料型態範圍
  • 宣告變數、常數和陣列
  • 變數範圍(Variable Scope)
  • 結構化例外處理(Structured Exception Handling)
  • 使用正確的資料型別
  • 使用者自訂資料結構(Structure)

不再使用 Set 和 Let 不再使用 Set 和 Let 關鍵字,除非在 class 檔案中設定屬性。因為在 Visual Basic.NET 中不再使用預設(default)屬性和方法,所以不需要靠他們來辨別,你在使用物件的方法與屬性時,若要設定變數值,一定要指明清楚。也就是原先在 VB6 若要設定變數 obj 內容為 objThis,必須要
Set obj=objThis
而接收預設屬性則可以
att=objThis 以及 att=objThis.DefaultAtt 兩種寫法
所以若 objThis 物件有一個預設屬性叫 DefaultAtt,若不寫 Set 會不清楚到底要存取 objThis 物件的參照還是 objThis.DefaultAtt 這個預設屬性。但到了 Visual Basic.NET,若你要讀取 DefaultAtt,因為沒有預設屬性的使用方式,所以只有(且一定要)以 objThis.DefaultAtt 這種寫法來讀取 DefaultAtt 屬性。
所以當你使用下列程式碼時
obj=objThis
那一定是要 objThis 這個物件參照,而不會模擬兩可。而這種寫法讓 Visual Basic.NET 的語法與 JavaScript 和 C# 的語法更為接近。
在 Visual Basic.NET 中 Class 的屬性撰寫
在 VB 6 要撰寫一個物件的屬性會利用以下的程式碼,其中 Property Get 是用來讓使用者讀取屬性,而 Property Set/Let 則是用來設定屬性,至於是要使用 Set 還是 Let 則要看賦予的屬性是物件還是一般的變數型別。
Private m_myProperty As Variant

Public Property Get myProperty() As Variant
If IsObject(m_myProperty)
Then Set myProperty = m_myProperty
Else
myProperty = m_myProperty
End If
End Property

Public Property Set myProperty(ByVal vNewValue As Variant)
Set m_myProperty = vNewValue
End Property

Public Property Let myProperty(ByVal vNewValue As Variant)
m_myProperty = vNewValue
End Property
但在 Visual Basic.NET 的程式碼要改成
Private m_myProperty As String
Public Property myProperty() As String
Get
myProperty = m_myProperty
End Get

Set
m_myProperty = Value
End Set
End Property

這個語法也是與 C# 的語法更為相似。

另外在 Visual Basic.NET 你必須要明確的利用 ReadOnly 或 WriteOnly 關鍵字來設定屬性是否為唯讀或唯寫,所以程式碼為
Public ReadOnly Property myProperty() As String
Get
myProperty = m_myProperty
End Get
End Property
或是

Public WriteOnly Property myProperty() As String
Set
m_myProperty = Value
End Se
t End Property

Subroutines 和 FunctionsVisual Basic.NET 在呼叫與使用 Subroutine 和 Function 上也有許多改變

■ 方法呼叫的語法改變 --所有的方法、Subroutine 和 Function 的呼叫都需要加上小括號,在以往若呼叫 Function 但不需要 Function 的回傳值﹔或 Function 不需要傳入參數,可以使用不加小括號的方式,或呼叫 Subroutine 不使用小括號等等是可以的,但在 Visual Basic.NET 都不再允許。 所以在 VB 6 的
datTime=Now '呼叫系統的 Now() 函數

DoSomething "par1",int2,"par3" '呼叫副函數 DoSomething,傳入三個參數 等方式要改成 datTime=Now()

DoSomething("par1",int2,"par3")
所以在 ASP+ 要注意
Response.Write "某些文字"
也要改成
Response.Write("某些文字")
■ 參數傳遞預設以 ByVal --在 VB6 參數傳遞若不設定,預設是以 ByRef 也就是傳變數位址給副函數的方式,但在 Visual Basic.NET 改成預設以 ByVal 將變數的值傳遞給副函數。
但要注意的是對 Classes 和 Interfaces 以及 array 和 string 的傳遞預設仍然是採用 ByRef

■ 使用 Return 語法 --Visual Basic.NET 不支援 VB6 為了向前相容(自 Basic 以來就存在 J )而使用的 GoSub 語法。現在 Return 語法專門用來在 Function 或 Sub 內還回控制權到呼叫者端。

完整的資料型態範圍
在 VBScript 只支援 Variant 資料型別,而在 Visual Basic.NET 所有的東西都是物件(object),包含 intrinsic 資料型別。而 Variant 型別只是一個特殊型態的物件。

Variant 型別在使用上一般比較沒有效率,但可能在某些地方用起來比較方便,例如從資料庫承接可能會傳回 NULL 的欄位,程式碼如右 Dim rec As Recordset
Set rec = New Recordset
rec.Open "Select Region From Northwind.dbo.Customers WHERE CustomerID='ALFKI'", "Provider=SQLOLEDB;Data Souce=(local);Initail Catalog=Northiwnd;User ID=sa;"
Dim res As Variant
res = rec.Fields(0)
If IsNull(res) Then
MsgBox "內容是 Null"
Else
MsgBox res
End If 在 Visual Basic.NET 的 Intrinsic 資料型別有型態 資料型態名稱大小預設值 數字Byte1 byte(8 bits) 0 Short2 bytes(16 bits) 0 Integer4 bytes(32 bits) 0 Long8 bytes(64 bits) 0 Single4 bytes(32 bits) 0.0 Double8 bytes(64 bits) 0.0 Decimal12 bytes(96 bits) 0.0Unicode 文字String "" Char 2 bytes(16 bits) ""其他型別Boolean False Date #01/01/0001 12:00:00AM# 注意,不再支援 Currency 型別,可以使用 Decimal 型別取代

宣告變數、常數和陣列
在 Visual Basic.NET 有增加一些在宣告變數、常數和陣列方面的語法,在宣告的同時可以賦予值--宣告的語句與執行的語法相似 Dim x As Integer=24
Dim y As Integer= x*24

Const My_Number=42
Const My_Number As Integer=42
Const My_String = "Hello World"
Const My_String As String = "Hello World" 注意,與 VB6 不相容的是在同一個宣告的語句中只能宣告一種型態,所以不能有下列的語法。
Dim x As Integer, y as String
也因此
Dim x,y As Integer
會宣告 x 和 y 兩個變數都是整數型別。 Dim 關鍵字也可以宣告初始化過的陣列
  Dim MyArray(20) As Integer
Dim MyArray(5) As Integer = (1,2,3,4,5)
Dim MyArray(3) As String = ("Bill", "Fred", "Mary")
陣列一定要透過 Dim 宣告,若以空的括號,內不定義數字,則該陣列可以在之後重新定義大小。ReDim 可以用來重新定義陣列的大小,但不能改變陣列的維度。
  Dim MyArray() As Integer
ReDim MyArray(20)

Dim MyArray(,,) '<---透過逗號來定義陣列的維度
ReDim MyArray(20,10,5)

时间: 2024-11-27 02:46:15

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(上)的相关文章

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(下)

vbscript|visual 新的簡易設定(assignment)語法 Visual Basic.NET 提供新的簡易設定語法,當程式碼撰寫如下時   MyVal = 10 MyVal += 10 這時 MyVal 的值為 20 ,程式碼等於   MyVal = MyVal + 10 繼承(Inheritance) Visual Basic.NET 現今是一個完整的物件導向(Object Orient)語言,也就是完整支援封裝.繼承.多型等等程式撰寫的方式,並提供建構/解構子.所以它增加了以往

Visual Basic 6/VBScript 與Visual Basic.NET 的比較(中)

vbscript|visual 變數範圍(Variable Scope) Visual Basic.NET 讓 Local 變數支援 block 範圍,也就是在迴圈或 If 等等區塊內宣告的變數在外部是看不到的,所以若程式碼撰寫如下Imports System Namespace MyNamespace Module MyModule Sub Main() Dim j as integer For j=1 to 10If True Then Dim i As Integer i=i+1 Cons

Visual Studio 服务器资源管理器连接windows azure 账号连不上为什么呢

问题描述 Visual Studio 服务器资源管理器连接windows azure 账号连不上为什么呢 大家好,Visual Studio 服务器资源管理器连接世纪华联托管的windows azure 账号连不上为什么呢 解决方案 这个你可以打世纪互联的客服电话问问: http://www.windowsazure.cn/support/contact/ 解决方案二: Visual Studio无论是否是中文版,都只能连Azure,而不能连山寨Azure. 解决方案三: 您好,中国版Azure

Microsoft visual C++.net 2010是 visual studio 2010吗?

问题描述 Microsoft visual C++.net 2010是 visual studio 2010吗? 如果不是,为什么Microsoft visual C++.net 2010百度一直搜索不到,请给个链接下载谢谢 解决方案 好像是可以到官网下载的, 不过暂时编程还是 建议VC++ 6.0 或者 记事本 解决方案二: 安装visual studio 2010时可以选择是否安装visual C++.net下载可以搜索vs2010

在visual studio中如何进入visual c++的语言环境?

问题描述 在visual studio中如何进入visual c++的语言环境? 安装的时候默认的环境是java script ,但是现在需要visual c++的语言环境,小白一枚,不知道如何设置,求问 解决方案 工具-导入导出设置,选择VC++方案. 解决方案二: 新建中有选择使用什么语言的 解决方案三: //new project---->visual C++---->一般写写C/C++小程序选择win32 Console Application

以批处理模式将Visual C++项目升级到Visual Studio .NET

可以在命令行上运行下面的 JScript 示例,以升级一个或多个 Visual C++ 6.0 项目. // when running this at the command line, // call it with CScript so you don't get UI. // example: CScript convert.js e:\yourprojects\old.dsp e:\yourprojects\new.vcproj // NOTE: full path required t

visual studio-C#编程,在Visual Studio里怎么重命名项目文件夹名称?

问题描述 C#编程,在Visual Studio里怎么重命名项目文件夹名称? 如图,为什么我改了"默认命名空间"的名称,而namespace的名称却没有改变? 解决方案 重新打开工程呢,为什么不直接在代码中改 解决方案二: 重新打开也是如此.很奇怪为什么VS可以对项目文件重命名,但对应的项目文件夹却改不了名称 解决方案三: 你改了过后,可以全部替换掉赛 解决方案四: 替换了就打不开了,提示文件移动删除 解决方案五: 实在不行,新建一个项目,把你的文件放进去 解决方案六: 下载一个Res

visual studio code-Ubuntu中运行visual code

问题描述 Ubuntu中运行visual code 同一个U盘里运行Ubuntu时,一个电脑可以使用code,可另一个电脑里却无法启动 解决方案 vscode需要64bit的ubuntu.并且对显卡驱动也有要求.建议你安装ubuntu,而不是在U盘中运行.

visual studio-vs2015 未能加载 visual C++ project system pakage

问题描述 vs2015 未能加载 visual C++ project system pakage vs2015添加c++项目是报如题错误,然后就显示不兼容工程.我安装的时候貌似除了F#和Python没有安装以外,全部都勾选了的,然后又用update1重新装了一次,发现问题后又修复了一次,还是没能解决啊,求大神指点 解决方案 你没有安装vc++本地支持,参考http://blogs.msdn.com/b/c/archive/2015/07/28/c-visual-studio-2015.aspx