Option Strict和Option Explicit有什么作用?

yre*_*uta 44 .net vb.net option-strict option-explicit

我看到这篇文章:

错别道......请使用严格和明确的选项...在一个软件开发项目中,我作为顾问,他们在各地都得到了大量的错误......结果发现开发人员无法拼写并且会声明拼写错误的变量.没什么大不了的,直到你为它分配一个值时使用正确的拼写......并且你有明确的选项.哎哟......"

什么是Option StrictOption Explicit呢?我已经google了它但无法得到这个想法(因为它主要是Visual Basic,我正在做PHP).

TLi*_*ebe 62

Option Explicit意味着必须声明所有变量.看到这里.如果没有这个,你可以通过拼写错误的另一个变量名来意外地声明一个新变量.当你试图调试VB程序并找出你的程序无法正常工作的原因时,这是导致很多悲痛的事情之一.在我看来,这甚至不应该是一个选择 - 它应该始终开启.

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

  • @DougNull不,`Option Explicit`与数据类型无关。总是可以使用`Dim`声明变量而不指定其类型。关闭Option Explicit选项后,您可以简单地开始使用它来声明一个变量。因此,如果您拼写错误的前一个变量,则意味着要声明一个新变量:那是邪恶的。 (3认同)

Mat*_*lko 28

TL; DR

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

Option Strict和Option Explicit默认为Off.要打开它们:

选项严格 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 
Run Code Online (Sandbox Code Playgroud)

或者更糟糕的是,您为一个您认为在范围内的变量赋值,但它不是,并且您最终声明一个具有相同名称但范围不同的新变量.

使用大量代码或长方法时,您可能很容易错过这些方法,因此应始终将其打开以防止出现这类问题

选项严格

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

Dim d As Double = 999.99
Dim s As Single = d 'No error with Option Strict Off
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

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

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

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


dan*_*ben 6

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

Option Explicit语句

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

Option Strict语句

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