Option Strict和Option Explicit做什么?

我看到这个post:

错别字…请使用严格和明确的选项..在一个软件开发项目中,我作为一个顾问,他们在每个地方都变得荒谬可笑的错误数量…原来开发人员不能拼写,并会用错误的拼写声明variables。 。没有什么大不了的,直到你给它赋值的时候使用了正确的拼写…并且你有选项显式closures。 哎哟给他们……“

什么是Option StrictOption Explicit ? 我GOOGLE了它,但不能得到的想法(因为主要是Visual Basic,我在做PHP)。

Option Explicit意味着所有的variables都必须声明。 看到这里 。 没有这个,你可以不小心声明一个新的variables,只是通过拼错另一个variables名。 这是当你试图debuggingVB程序,并找出你的程序无法正常工作,导致很多悲伤的事情之一。 在我看来,这甚至不应该是一个select – 它应该永远是。

Option Strict “将隐式数据types转换限制为仅扩展转换”。 看到这里 。 启用此选项后,您不会意外地将一种数据types转换为不太精确的数据types(例如,从IntegerByte )。 同样,默认情况下应打开一个选项。

TL; DR

Option StrictOption Explicit帮助您在devise时捕获潜在的实际的错误,而不是在运行时编译代码和失败。 您应该同时打开

选项严格和选项显式默认closures。 要打开它们:

Option Strict Tools -> Options -> Projects and Solutions -> VB defaults -> Option Strict 。 将其设置为On

选项显式Tools -> Options -> Editor -> Require Variable Declaration 。 勾选它。

选项显式

使用Option Explicit Off,您不必在使用它之前声明(Dim)一个variables:

a = 123 'a is automatically declared as an Integer

当你在一个地方声明一个variables,并认为你稍后使用它时,这会变得很危险,但是input错误:

 Dim counter As Integer = 0 'some lines later... countr = 55 'This creates a new variable called countr 

或者更糟糕的是,你给一个你认为在范围内的variables赋值,但不是,你最终会声明一个新的variables,但是名称相同但范围不同。

有了大量的代码或长的方法,这些可能很容易错过,你应该总是打开它,以防止这些问题

选项严格

使用Option Strict Off可以隐式地将数据types转换为缩小types,而不会出错

 Dim d As Double = 999.99 Dim s As Single = d 'No error with Option Strict Off 

对于这些情况,Option Strict作为开发人员的警告,以确保double值永远不会超过Single.MaxValue

您也可以将Enum分配给不正确的值,而不会出错。 以下是一个真实的例子:

在这里输入图像描述

该variables应该被设置为EOpticalCalStates.FAILED (24),实际上它将状态设置为4的值,这相当于EOpticalCalStates.ALI_HOR

这样的事情不容易发现。

因此,默认情况下应始终启用Option Strict。 这个设置应该已经设置为默认值,但是微软决定放弃它来增加向后兼容性(事后看来这是IMO的一个错误)

在此处查找详细信息: http : //support.microsoft.com/kb/311329

Option Explicit语句

默认情况下,Visual Basic .NET或Visual Basic编译器强制执行显式variables声明,这需要您在使用它之前声明每个variables。 要更改此默认行为,请参阅更改默认项目值部分。

Option Strict语句

默认情况下,Visual Basic .NET或Visual Basic编译器不执行严格的数据types。 要更改此默认行为,请参阅更改默认项目值部分。