日期:2009-01-02  浏览次数:20532 次

对Boolean类型数据使用AND/OR/NOT操作
    And和Or关键字在Visual Basic.NET和Visual Basic 6.0中的使

用是不同的,在Visual Basic 6.0中,AND运算既执行逻辑AND操作也执行逐位AND操作,取决于操作数(如果是Boolean类型,执行逻辑AND操作,如果是数字,执行逐位AND操作)。在Visual Basic.NET中,AND运算只执行逻辑AND操作。对于逐位操作,在Visual Basic.NET提供了一组操作:BitAnd, BitOr, BitNot以及BitXor 。

下面是演示这些差异的范例程序

Dim a As Integer
Dim b As Integer
Dim c As Boolean
a = 1
b = 2
c = a And b
MsgBox ("The answer is " & c)

    当上面的代码在Visual Basic 6.0下运行时,结果是False(执行
逐位AND操作);然而在Visual Basic.NET下,结果是True(执行逻辑AND操作)。
    要确定你的程序在升级后也运行结果同升级前一样,Visual
Basic.NET包含了兼容函数VB6.And, VB6.Or以及VB6.Not,这些函数执行的结果同Visual Basic 6.0下的AND/OR/NOT操作的执行结果是一样的。当代码升级后,结果会象下面这样:

Dim a As Short
Dim b As Short
Dim c As Boolean
a = 1
b = 2
c = VB6.And(a, b)
MsgBox ("The answer is " & c)

升级后的代码会得出False的结果,同Visual Basic 6.0下运行一样

    如果不想你的代码升级后使用兼容函数,就需要确保你的AND/OR/NOT都使用在Boolean类型数据的操作中,例如,如果上面的代码更改为下面的方式:

Dim a As Integer
Dim b As Integer
Dim c As Boolean
a = 1
b = 2
c = a <> 0 And b <> 0
MsgBox ("The answer is " & c)

当升级后,代码同原来的几乎一样:

Dim a As Short
Dim b As Short
Dim c As Boolean
a = 1
b = 2
c = a <> 0 And b <> 0
MsgBox ("The answer is " & c)

    同前面不同的是每一个操作都是在Boolean数据之间进行的,因
此它们在Visual Basic 6.0中使用的都是逻辑AND操作。所以在升级到Visual Basic.NET后不会发生改变。这样做的意义是你可以直接在Visual Basic.NET和Visual Basic 6.0之间拷贝和粘贴代码,你的代码会运行的更快因为使用的是本地的AND操作而不是兼容函数。

    另外一个需要考虑的问题是对于函数结果的AND/OR/NOT 操作的
问题,例如下面的范例:

Dim b As Boolean
b = Function1() And Function2()

    在Visual Basic 6.0中,Function1和Function2的结果都会执行
后再将结果进行AND操作。在Visual Basic.NET中,只有当Function1的结果为True时才会计算Function2。因为Visual Basic.NET中的AND运算执行的是逻辑AND操作,如果Function1结果为False,AND结果肯定是False,为了加快速度就不再执行Function2的了。但是如果
Function2另有目的,例如用于避免某些错误,那么就会出现不可预
知的错误,那么上面的代码升级后就会象下面的样子:

Dim b As Boolean
b = VB6.AND(Function1(), Function2())

为了不在升级代码中出现兼容函数,原来的代码需要做如下的改动:

Dim b As Boolean
Dim c As Boolean
Dim d As Boolean
c = Function1()
d = Function2()
b = c And d

    另一个需要注意的是在Visual Basic.NET中,True值将不再是-1
而是1。做这个改变是为了使Visual Basic.NET能集成在 .NET语言中。因为有这个改变,你需要再你的Visual Basic 6.0工程中使用常量True而不是-1来表示真值,使用Boolean类型而不是整数类型变量保存Boolean数据。下面的代码说明了Visual Basic 6.0和Visual Basic.NET
之间的不同:

Dim i As Integer
i = True
If i = -1 Then
    MsgBox ("True")
Else
    MsgBox ("False")
End If
在Visual Basic 6.0中,结果为True,而在Visual Basic.NET中结果
为False。

如果对代码做如下改动,程序在两种语言下运行都会显示True

Dim i As Boolean
i = True
If i = True Then
    MsgBox ("True")
Else
    MsgBox ("False")
End If

通过上面的范例可以看出在程序中需要注意两点:
1、使用常量True和False来判断是否而不要使用0和-1
2、使用Boolean类型变量储存Boolean数值而不要使用Integer类型变
量如果在你的程序中没有这么做的话,在升级后你还需要做大量的手工改动