Option Strict和Option Explicit有什么作用?

时间:2010-03-16 13:15:51

标签: .net vb.net option-strict option-explicit

我看到这篇文章:

  

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

无论如何,Option StrictOption Explicit是什么?我用谷歌搜索了但是无法得到这个想法(因为它主要是Visual Basic,我正在做PHP)。

3 个答案:

答案 0 :(得分:60)

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

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

答案 1 :(得分:27)

TL; DR

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

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

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

选项明确 Tools -> Options -> Editor -> Require Variable Declaration。打勾。

选项明确

使用选项显式关闭,您无需在使用之前声明(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 

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

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

Option Strict

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

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

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

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

enter image description here

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

这样的事情不容易被发现。

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

答案 2 :(得分:6)

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

  

Option Explicit语句

     

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

     

Option Strict声明

     

通过   默认情况下,Visual Basic .NET或   Visual Basic编译器不强制执行   严格的数据输入。要改变这一点   默认行为,请参阅更改   默认项目值部分。