49

我看到了这个帖子:

错别字……请使用严格和明确的选项……在我担任顾问的一个软件开发项目中,他们到处都出现了荒谬的错误……结果开发人员无法拼写并且会声明拼写错误的变量。 . 没什么大不了的,直到您在为它分配值时使用正确的拼写......并且您有明确的选项。哎哟他们……”

到底是Option Strict什么Option Explicit?我用谷歌搜索了它,但无法理解(因为主要是 Visual Basic,我正在做 PHP)。

4

3 回答 3

70

Option Explicit意味着必须声明所有变量。见这里。如果没有这个,您可能会因为拼错另一个变量名而意外声明一个新变量。当您尝试调试 VB 程序并找出程序无法正常工作的原因时,这是导致很多悲伤的事情之一。在我看来,这甚至不应该是一个选项 - 它应该始终开启。

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

于 2010-03-16T13:20:09.693 回答
35

TL;博士

Option StrictOption Explicit帮助您在设计时捕获潜在实际错误,而不是在运行时编译和失败代码。你应该切换两者 On

Option Strict 和 Option Explicit 默认为关闭。要打开它们:

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

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

选项显式

使用Option Explicit Off您不必在使用变量之前声明 (Dim) 变量:

a = 123 'a is automatically declared as an Integer

当您在一个地方声明一个变量并认为您稍后会使用它但输入错误时,这会变得很危险:

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

或者更糟糕的是,您将一个值分配给您认为在范围内的变量,但事实并非如此,并且您最终声明了一个具有相同名称但范围不同的新变量。

使用大量代码或长方法时,这些很容易被忽略,因此您应该始终将其打开以防止出现此类问题。

期权严格

使用Option Strict Off您可以将数据类型隐式转换为缩小类型而不会出现错误:

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

对于这些情况,Option Strict 向开发人员发出警告,以确保双精度值永远不会超过Single.MaxValue.

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

在此处输入图像描述

变量应该设置为EOpticalCalStates.FAILED(24),实际上它将 State 设置为 4 的值,相当于EOpticalCalStates.ALI_HOR.

像这样的东西不容易被发现。

因此,您应该始终默认启用 Option Strict。此设置应该设置为默认设置,但 Microsoft 决定将其关闭以增加向后兼容性(事后看来,这是一个错误 IMO)。


如果您在为新项目设置默认值之前已经启动了一个项目,您将需要使用:

“项目”菜单->“属性...”项->“编译”选项卡->将“选项严格”设置为“开”。

于 2015-05-01T10:12:21.423 回答
6

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

选项显式语句

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

Option Strict 语句

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

于 2010-03-16T13:20:06.770 回答