VB.NET中的Option Explicit和Option Strict

原创 2003年05月08日 14:19:00

VB.NET中的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)的变量是一个放宽的类型转换,长整型可以包含所有整型变量的值。相反,从长整型向整型变量的转换是一个缩窄的类型转换,因为一些长整型的值是超出整型所表示的范围的。

VB.NET默认放宽的类型转换。例如在下面的代码的第二行中将会自动发生放宽的类型转换,赋值表达式右边的变量自动转换为长整型变量,以便能保存到变量b中。

Dim a As Integer = 5

   Dim b As Long = a

自动发生的类型转换,称为“隐式类型转换”。

现在来考虑相反的情况:

Dim a As Long = 5

   Dim b As Integer = a

上面代码的第二行,试图进行隐式缩窄的类型转换。编译器是否允许这种转换,决定于Option Strict的设置,如果Option Strict设置为On,试图进行隐式缩窄的类型转换将会发生编译错误;设置为Off,编译器将自动在后台进行类型转换。这样在程序运行时,如果实际要转换的值超出目标类型的范围,将会导致程序抛出异常。

对于某些程序,有时进行缩窄的类型转换是必要的。因此程序员可能知道某个变量进行类型转换时,会超出目标类型的范围,而添加适当的代码来处理可能发生的异常。这种情况可以通过适当的函数来进行显式的类型转换,例如:

Dim a As Long = 5

   Dim b As Integer = CInt(a)

    上面的变换即称为“显式的类型转换”,因为程序员明确的要求进行整型变换。注意尽管从表面上来看,上面的代码与前面的“隐式类型转换”相比,多了一次函数调用,但是编译后的代码是一样的,所以执行的效率和隐式类型转换一样。

(注该文节选原文部分翻译,改写)

选择VB.Net还是C#(转)

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 03:31
  • 296

Option Explicit On 和Option Strict Off

VB.NET中的Option Explicit  和 Option Strict是针对编译器的语句。作为程序员总是想在程序编译期时候发现程序的错误,而不愿在运行期来发现。当一个程序成功编译以后,你可能...
  • u010052030
  • u010052030
  • 2013年10月03日 15:00
  • 1637

从 Option Explicit 开始的零碎知识点(一)

这两天一直在围着 Visual Basic 转,敲了一些例子,记录了一些零碎的知识点,自己都觉得自己有点小幼稚,不过还好啦,至少没有放弃!      Option Explicit '定义变量X D...
  • u010282984
  • u010282984
  • 2016年01月26日 22:13
  • 834

Option Explicit语句的重要性

本文章摘自《VBScript程序员参考手册》第81-82页   尽管这三个变量都没有显式的生命,但VBScript并不在意。这段代码能正常的执行,最终会出现一个对话框并显示数字3。这似乎...
  • tiantuanzi
  • tiantuanzi
  • 2015年10月14日 17:11
  • 693

VBA中Option的四种用法

下面的内容出处于:VBA标准模块与类模块中的部分,这里仅仅为了作者查找的方便.  1、Option Explicit。当使用Option Explicit时,必须在模块中的所有过程声明每一个变量,否则...
  • hello_wyq
  • hello_wyq
  • 2008年07月03日 17:31
  • 3271

从 Option Explicit 开始的零碎知识点(三)

接近尾声,长舒了一口气,最后的内容也是目前来说自己蛮关心的“数据库”,在VB里的数据库相对来说简单很多,不管是是从认识它,创建它,还是到访问它。 ...
  • u010282984
  • u010282984
  • 2016年01月29日 11:15
  • 711

从 Option Explicit 开始的零碎知识点(二)

每次开始敲一页代码的时候,经常会遇到“定义”这个东西 Option Explicit,今天在写程序的时候碰到了一个不需要“Option Explicit”直接定义的,如下: Option Expl...
  • u010282984
  • u010282984
  • 2016年01月27日 21:56
  • 568

VBA 声明 Option Explicit,让代码更规范

Option Explicit Option Explicit 语句在模块级别中使用,强制显示声明模块中的所有变量。 Option Explicit 语句必须写在模块的所有过程之前。 ...
  • sxzlc
  • sxzlc
  • 2017年08月03日 00:32
  • 106

asp中,option explicit的作用

在asp中,option explicit的作用是检查未定义的变量。意思是当你使用一个未定义的变量时,asp编译时就会报错。    (option exiplicit只能放在asp代码的最前面。...
  • wkj001
  • wkj001
  • 2016年12月04日 10:15
  • 398

Option Explicit

Option ExplicitPublic Const WM_USER = &H400Public Const EM_EXGETSEL = WM_USER + 52Public Const EM_LI...
  • iam1999
  • iam1999
  • 2007年10月16日 00:52
  • 159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB.NET中的Option Explicit和Option Strict
举报原因:
原因补充:

(最多只允许输入30个字)