我已阅读Jeff Atwood的博文 Option Strict and Option Explicit in VB.NET 2005 。
我对以下声明感兴趣:“您应该始终为每个应用程序启用Option Strict On”。
我同意在面向对象的编程语言中,这应该设置为ON。但是,我看到的每个应用程序似乎都将其设置为OFF。我在网上找到的大多数代码片段似乎都暗示开发人员已经将其关闭,例如我看到了很多:
dim id as Integer = objDR("ID")
这里对象被隐式地转换为整数。
开发人员在决定关闭它时是否有特定的标准,或者只是为了与Visual Basic 6.0保持一致?
答案 0 :(得分:1)
在VB6中,通常无法在编译时确定某些变量,字段或参数的类型。一些这样的存储位置实际上总是保存一种特定类型的物品;但是,有些人可能会在不同时间持有不同的东西。假设不相关的类型Moe
和Larry
都具有名为Curly
的属性,并且采用未指定类型的参数Foo
的方法显示为Foo.Curly = 5
。如果这样的方法可以传递Moe
或Larry
,那么将代码干净地移植到VB.NET的Option Strict On
方言将需要将其写为两个不同的重载:一个需要Moe
,需要Larry
,或Moe
和Larry
进行修改才能实现与成员Curly
的公共接口。如果这些方法可行,代码应该移植到VB.NET的Option Strict On
方言。但是,一些现有的VB6代码无法修复;将此类代码移植到Option Strict Off
方言可能比重新处理Option Strict On
更容易。
在某些情况下,我会考虑在尝试移植现有的VB6代码时使用Option Strict Off
是合理的,这些代码无法与Option Strict On
兼容。但是,我认为没有理由创造任何需要大量使用该方言的新设计。许多与之相关的行为与.NET的新功能(如泛型)不能很好地交互,关系运算符不能产生一致的结果(例如“-1”大于-2且-2大于“-3”,但是“-1”小于“-3”),并且通常很难预测某段代码最终会做什么。
答案 1 :(得分:0)
MSDN answer
为所有编程元素指定数据类型称为强类型。当您设置Option Strict On时,Visual Basic会强制执行强类型。强烈建议这样做,原因如下:
它支持IntelliSense支持您的变量和参数。这允许您在键入代码时查看其属性和其他成员。
它允许编译器执行类型检查。这有助于捕获由于溢出等错误而在运行时失败的语句。它还捕获对不支持它们的对象的方法的调用。
它可以加快代码的执行速度。其中一个原因是,如果没有为编程元素指定数据类型,Visual Basic编译器会为其指定Object类型。您编译的代码可能必须在Object和其他数据类型之间来回转换,这会降低性能。
答案 2 :(得分:0)
来自MSDN
在IDE中设置警告配置
当您使用编译页面,项目设计器(Visual Basic)时 在Option Strict语句中,您可以对 产生错误的条件。警告配置部分 “编译页面”具有与三个条件对应的设置 当Option Strict打开时导致编译时错误。以下 是这些设置:
Implicit conversion Late binding; call could fail at run time Implicit type; object assumed
当您将Option Strict设置为On时,所有这三个警告 配置设置设置为错误。将Option Strict设置为时 关闭,所有三个设置都设置为无。
您可以单独将每个警告配置设置更改为 无,警告或错误。如果全部三个警告配置设置 设置为Error,On出现在Option strict框中。如果全部三个 设置为“无”,此框中显示“关闭”。对于任何其他组合 这些设置(自定义)出现。