.net Option Strict和Option Explicit做什么?

.net Option Strict和Option Explicit做什么?,.net,vb.net,option-strict,option-explicit,.net,Vb.net,Option Strict,Option Explicit,我看到这个帖子: 输入错误…请使用严格和明确的选项。。在我作为顾问参与的一个软件开发项目中,他们到处都会遇到荒谬的错误……结果发现,开发人员不会拼写,并且会声明拼写错误的变量。。这没什么大不了的,除非你在给它赋值时使用了正确的拼写……而且你关闭了OptionExplicit。哎哟……” 什么是Option Strict和Option Explicit呢?我在谷歌上搜索了一下,但没有找到答案(因为大部分是Visual Basic,我在做PHP)。在这里找到详细信息: Option显式语句 借 默认

我看到这个帖子:

输入错误…请使用严格和明确的选项。。在我作为顾问参与的一个软件开发项目中,他们到处都会遇到荒谬的错误……结果发现,开发人员不会拼写,并且会声明拼写错误的变量。。这没什么大不了的,除非你在给它赋值时使用了正确的拼写……而且你关闭了OptionExplicit。哎哟……”

什么是
Option Strict
Option Explicit
呢?我在谷歌上搜索了一下,但没有找到答案(因为大部分是Visual Basic,我在做PHP)。

在这里找到详细信息:

Option显式语句

借 默认情况下,Visual Basic.NET或 Visual Basic编译器强制执行 显式变量声明,其中 要求您申报所有 变量,然后再使用它。要更改 此默认行为,请参见更改 默认项目值部分

选项严格声明

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


Option Explicit
意味着必须声明所有变量。请参阅。如果没有这一点,您可能会通过拼写另一个变量名而意外声明新变量。在调试VB程序并找出程序无法正常运行的原因时,这是一件非常令人悲伤的事情。在我看来,这甚至不应该是一个选项-它应该始终处于启用状态

Option Strict
“将隐式数据类型转换限制为仅扩大转换”。请参阅。启用此选项后,您不会意外地将一种数据类型转换为精度较低的另一种数据类型(例如,从
整数转换为
字节)。同样,默认情况下应打开的选项。

TL;DR
Option Strict
Option Explicit
帮助您在设计时捕获潜在和实际错误,而不是在运行时编译代码并失败

默认情况下,Option Strict和Option Explicit处于关闭状态。要打开它们,请执行以下操作:

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

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

选项显式 禁用选项Explicit后,您不必在使用变量之前声明(调暗)变量:

a=123'a自动声明为整数

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

Dim counter As Integer = 0
'some lines later...
countr = 55 'This creates a new variable called countr 
甚至更糟糕的是,您将一个值赋给一个您认为在作用域中的变量,但它不在作用域中,并且最终声明了一个名称相同但作用域不同的新变量

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

选项严格 使用选项Strict Off可以隐式地将数据类型转换为缩小类型,而不会出现错误:

Dim d As Double = 999.99
Dim s As Single = d 'No error with Option Strict Off
对于这些情况,Option Strict向开发人员发出警告,以确保double值不应超过Single.MaxValue

您也可以将枚举分配给不正确的值,而不会出错。以下是一个实际示例:

变量应设置为
eopticalstates.FAILED
(24),事实上,它将状态设置为值4,相当于
eopticalstates.ALI\u HOR

像这样的东西不容易发现

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


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


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

选项显式
在其他答案中得到了完美的描述。我只是想让人们知道,
选项Strict
似乎不再受支持。请看:@Olivier:option strict仍然在我们身边,way back机器显示您引用的页面没有列出2013年爬网的option strict,但这肯定只是一个过眼云烟,它一直存在,对于较短的程序,Option Explicit off(选项显式关闭)可以节省构思和键入数据类型的开发时间和精力。@DougNull否,
Option Explicit
与数据类型无关
Dim
始终可用于声明变量,而无需指定其类型。使用
选项Explicit off
时,只需开始使用变量,就可以额外声明变量。因此,如果您拼错了前一个变量,您就是在声明新的变量:这很糟糕。
Option Explicit
在默认情况下处于启用状态。