VBNET中的Option Explicit 和 Option Strict是针对编译器的语句作为程序员总是想在程序编译期时候发现程序的错误而不愿在运行期来发现当一个程序成功编译以后你可能会认为该程序已经通过所有编译期的错误检查不会再有其它错误使你吓一跳然而事实上程序运行一次没有错误并不表明下次运行时是否会发生错误因此如果潜在的运行期的错误在编译期被及时发现应用程序将变得非常稳定
Option Explicit语句决定编译器是否要求所有的变量被显式的声明语法如下
Option Explicit [ On | Off ]
如果选择On则编译器是否要求所有的变量被显式的声明如果选择Off则编译器是允许变量的隐式声明这样以来可不是一件好事比如在代码的编写过程中不小心敲错了变量名由于编译器允许变量的隐式声明所以在程序编译的时候是不会发生错误的但是在运行期可能会发生不可预期的错误因此在代码中最好不要用Option Explicit Off
Option Strict语句决定编译器类型的隐式转换方面的要求语法如下
Option Strict [ On | Off ]
如果选择On则编译器允许放宽的隐式类型转换如果选择Off则编译器是不仅允许放宽的类型转换而且允许缩窄的类型转换对于放宽的类型转换一般不会发生数据的丢失或不正确的结果例如将一个整型(Integer)的变量转换为长整型(Long)的变量是一个放宽的类型转换长整型可以包含所有整型变量的值相反从长整型向整型变量的转换是一个缩窄的类型转换因为一些长整型的值是超出整型所表示的范围的
VBNET默认放宽的类型转换例如在下面的代码的第二行中将会自动发生放宽的类型转换赋值表达式右边的变量自动转换为长整型变量以便能保存到变量b中
Dim a As Integer =
Dim b As Long = a
自动发生的类型转换称为隐式类型转换
现在来考虑相反的情况
Dim a As Long =
Dim b As Integer = a
上面代码的第二行试图进行隐式缩窄的类型转换编译器是否允许这种转换决定于Option Strict的设置如果Option Strict设置为On试图进行隐式缩窄的类型转换将会发生编译错误设置为Off编译器将自动在后台进行类型转换这样在程序运行时如果实际要转换的值超出目标类型的范围将会导致程序抛出异常
对于某些程序有时进行缩窄的类型转换是必要的因此程序员可能知道某个变量进行类型转换时会超出目标类型的范围而添加适当的代码来处理可能发生的异常这种情况可以通过适当的函数来进行显式的类型转换例如
Dim a As Long =
Dim b As Integer = CInt(a)
上面的变换即称为显式的类型转换因为程序员明确的要求进行整型变换注意尽管从表面上来看上面的代码与前面的隐式类型转换相比多了一次函数调用但是编译后的代码是一样的所以执行的效率和隐式类型转换一样