初始化为 Empty,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,则自动转换为空字符串。
Visual Basic.NET
对象变量均初始化为 Nothing,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,将自动转换为空字符串。使用 Nothing 代替特殊的 Empty 值可以降低语言的复杂性,语言协同操作性也更强。
升级向导
Null 和 Null 传播
Visual Basic 6.0
Null 值为 Variant 的子类型,表示变量不包含有效数据。Null 值通过表达式和函数“传播”。如果表达式的任一部分为 Null,则整个表达式为 Null。将 Null 作为参数传递给大多数函数时,这些函数也将返回 Null。
Visual Basic.NET
不支持 Null 传播。使用 ADO.NET 对数据进行编程的模型用于在检索字段的值之前先检查字段的值是否为 Null。包含 null 的变量将作为 DBNull 类型的对象封送处理至 CLR。
Visual Basic.NET 处理 Null 时更加直接:字符串函数(例如 Left())总是返回字符串,与您的预期一样。
升级向导
Null 值和 IsNull 函数标记有升级警告注释。例如,以下代码:
If x Is Null Then MsgBox "Null"
升级后将变为:
'' UPGRADE_WARNING: Use of IsNull() detected If IsDBNull(x) Then MsgBox "Null"
Def<Type>
Visual Basic 6.0
DefBool、DefByte、DefInt、DefLng、DefCur、DefSng、DefDbl、DefDec、DefDate、DefStr、DefObj 和 DefVar 语句用于在模块级设置变量、参数和过程返回类型(以指定字符开始)的默认数据类型。
Visual Basic.NET
避免使用隐式类型声明,提高了代码的可读性和可靠性。
升级向导
将变量类型的显式声明插入代码。例如,以下代码:
DefStr a-z
Sub MySub
s = "Hello"
End Sub
升级后将变为:
Sub MySub
Dim s As String
s = "Hello"
End Sub
块内的局部变量
Visual Basic 6.0
从包含声明的行至过程结束的范围内,局部变量均可见。
Visual Basic.NET
Visual Basic.NET 支持变量的块范围。这意味着从包含声明的行开始,至出现声明的块结束,局部变量均可见。例如:
Sub Test(x As Integer)
If x < 0 Then
Dim y As Integer = - x
''
Else
''
End If
End Sub
以上示例中的变量 y 仅在声明该变量的块中可用;更确切地说,它仅在其声明至 Else 语句之间可用。如果需要在整个过程中使用变量,则必须在 If/Else/End If 控制结构之外声明该变量。
变量的块范围是许多结构语言共有的功能。过程局部变量允许定义过程内部变量,从而对结构化编程提供支持,与此类似,块级别变量允许定义代码块内部变量,从而对结构化分解提供支持。
升级向导
如果变量在块内声明,变量将自动移至模块级范围。例如,以下代码:
If x =1 Then
Dim y As Integer
End If
升级后将变为:
Dim y As Integer
If x =1 Then
End If
新的自动重新实例化
Visual Basic 6.0
窗体的类变量声明 Dim x As New <classname> 将导致编译器每次引用 x 时生成代码。此代码检查 x 是否为 Nothing;如果是 Nothing,则创建类的新实例。例如,以下代码:
Dim x As New MyClass
''
Call x.MyMethod()
等同于:
Dim x As MyClass
''
If x Is Nothing Then
Set x = New MyClass
End If
Call x.MyMethod()
即使变量已经设置为 Nothing,在下一次调用时该变量仍将重新实例化。
Visual Basic.NET
窗体的变量声明 Dim x As New <classname> 等同于 Dim x As <classname> = New <classname>。引用通过此语法声明的变量不会生成特殊代码。
Visual Basic.NET 声明 As New 比 Visual Basic 6.0 中的同一声明更加有效。大多数对这类变量的引用不需要额外的开销。而且,Visual Basic 6.0 的“自动实例化”行为对于发现它的许多编程人员来说非常古怪。
升级向导
这极少会成为问题。