Option Strict 和 Option Explicit 有什么作用?

What do Option Strict and Option Explicit do?

提问人:yretuta 提问时间:3/16/2010 最后编辑:Nate Barbettiniyretuta 更新时间:10/30/2019 访问量:49402

问:

我看到了这个帖子:

错别字。。。请严格和明确地使用选项。在我作为顾问参与的一个软件开发项目中,他们到处都出现了大量错误......原来开发人员不会拼写,并且会用拼写不正确的声明变量。没什么大不了的,直到你在给它赋值时使用正确的拼写......并且您有明确的选项。哎哟......”

到底是什么?我已经用谷歌搜索了一下,但无法理解这个想法(因为主要是 Visual Basic,我正在做 PHP)。Option StrictOption Explicit

.net vb.net option-strict option-explicit

评论

0赞 Olivier 8/25/2017
Option Explicit在其他答案中得到了完美的描述。我只是想让人们知道这似乎不再得到支持。参见:msdn.microsoft.com/en-us/library/aa338155(v=vs.60).aspxOption Strict
0赞 jmoreno 8/3/2020
@Olivier:Option Strict 仍然在我们身边,Way Back Machine 显示您引用的页面没有列出 2013 年抓取的 Option Strict,但这一定只是一个疏忽,它一直存在,而且没有迹象表明它会消失。

答:

6赞 danben 3/16/2010 #1

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

Option Explicit 语句

由 默认值,Visual Basic .NET 或 Visual Basic 编译器强制执行 显式变量声明,其中 要求您声明每个 变量。更改 此默认行为,请参阅更改 “默认项目值”部分。

Option Strict 语句

由 默认值,Visual Basic .NET 或 Visual Basic 编译器不强制执行 严格的数据类型。要更改此设置,请执行以下操作 默认行为,请参阅 更改 “默认项目值”部分。

75赞 TLiebe 3/16/2010 #2

Option Explicit表示必须声明所有变量。请看这里。否则,您可能会因为拼写错误另一个变量名称而意外声明一个新变量。这是当您尝试调试 VB 程序并找出程序无法正常工作的原因时引起很多悲伤的事情之一。在我看来,这甚至不应该是一个选项——它应该始终处于开启状态。

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

评论

1赞 Doug Null 2/23/2018
对于较短的程序,选项“显式关闭”可以节省思考和键入数据类型的开发时间和精力。
12赞 Teejay 8/27/2018
@DougNull 否,与数据类型无关。 始终可用于声明变量,而无需指定其类型。另外,你可以通过简单地开始使用变量来声明它。因此,如果你拼错了以前的变量,你就是在声明新的变量:这是邪恶的。Option ExplicitDimOption Explicit off
38赞 Matt Wilko 5/1/2015 #3

TL;博士

Option Strict并帮助您在设计时捕获潜在实际错误,而不是在运行时编译代码并失败。您应该同时切换两者Option ExplicitOn

默认情况下,“严格选项”和“显式选项”处于关闭状态。要打开它们:

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

选项显式 。勾选它。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

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

enter image description here

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

这样的事情不容易发现。

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


如果在为新项目设置默认值之前已启动项目,则需要使用:

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

评论

0赞 Teejay 8/27/2018
Option Explicit默认情况下处于打开状态。support.microsoft.com/en-us/help/311329/......