-1

我已阅读 Jeff Atwood 的博文Option Strict and Option Explicit in VB.NET 2005

我对以下声明感兴趣:“您应该始终为每个应用程序打开 Option Strict On”。

我同意在面向对象的编程语言中,这应该设置为 ON。但是,我查看的每个应用程序似乎都将其设置为关闭。此外,我在网上找到的大多数代码片段似乎都表明开发人员已将其关闭,例如我经常看到:

dim id as Integer = objDR("ID")

这里对象被隐式转换为整数。

是否有开发人员在决定关闭此功能时使用的特定标准,还是只是为了与Visual Basic 6.0保持一致?

4

3 回答 3

2

在 VB6 中,通常不可能在编译时确定某些变量、字段或参数的类型。一些这样的存储位置实际上总是存放一种特定类型的物品;然而,有些人可能在不同的时间持有不同的东西。假设不相关的类型Moe都有Larry一个名为 的属性Curly,以及一个采用Foo未指定类型参数的方法Foo.Curly = 5。如果可以将这样的方法传递给 aMoe或 a Larry,那么将代码干净地移植到Option Strict OnVB.NET 的方言将需要将其编写为两个不同的重载:一个接受 a Moe,一个接受 a Larry,或者那个Moe并被Larry修改实现与成员的通用接口Curly. 在这两种方法都可行的情况下,代码应该移植到Option Strict OnVB.NET 的方言中。然而,一些现有的 VB6 代码将无法修复;将这样的代码移植到Option Strict Off方言中可能比重新编写它来使用要容易得多Option Strict On

在某些情况下,我会考虑Option Strict Off在尝试移植无法与Option Strict On. 然而,我认为没有理由创建任何需要大量使用该方言的新设计。与其相关的许多行为不能很好地与 .NET 的新功能(例如泛型)交互,关系运算符不会产生一致的结果(例如,“-1”大于 -2,-2 大于“-3”,但是“-1”小于“-3”),而且通常很难预测给定的一段代码最终会做什么。

于 2013-05-24T19:11:52.420 回答
0

MSDN答案

为所有编程元素指定数据类型称为强类型。当您设置 Option Strict On 时,Visual Basic 会强制执行强类型。强烈建议这样做,原因如下:

它为您的变量和参数启用 IntelliSense 支持。这允许您在键入代码时查看它们的属性和其他成员。

它允许编译器执行类型检查。这有助于捕获由于溢出等错误而在运行时失败的语句。它还捕获对不支持它们的对象上的方法的调用。

它可以更快地执行您的代码。这样做的一个原因是,如果您没有为编程元素指定数据类型,Visual Basic 编译器会为其分配 Object 类型。您的编译代码可能必须在 Object 和其他数据类型之间来回转换,这会降低性能。

于 2013-05-24T19:52:09.077 回答
0

来自MSDN

在 IDE 中设置警告配置

当您使用编译页面、项目设计器 (Visual Basic) 而不是 Option Strict 语句时,您可以额外控制生成错误的条件。编译页面的警告配置部分具有与选项严格打开时导致编译时错误的三个条件相对应的设置。以下是这些设置:

Implicit conversion

Late binding; call could fail at run time

Implicit type; object assumed

当您将 Option Strict 设置为 On 时,所有这三个警告配置设置都设置为 Error。当您将 Option Strict 设置为 Off 时,所有三个设置都设置为 None。

您可以单独将每个警告配置设置更改为无、警告或错误。如果所有三个警告配置设置都设置为错误,则在选项严格框中显示开。如果这三个都设置为无,则此框中将显示关闭。对于这些设置的任何其他组合,(自定义)会出现。

于 2013-05-24T20:10:28.587 回答