2

浏览一些旧的 VB.Net 代码,我注意到一个奇怪的模式让我摸不着头脑。

Dim objMyObject As Namespace.Child.ChildType = Nothing
objMyObject = New Namespace.Child.ChildType

(维度和分配之间没有附加代码。)

似乎首选的样式是在一行上同时执行,或者跳过= Nothing. 如下:

Dim objMyObject As Namespace.Child.ChildType = New Namespace.Child.ChildType

或者

Dim objMyObject As Namespace.Child.ChildType
objMyObject = New Namespace.Child.ChildType

或者,正如@helrich 所建议的那样

Dim objMyObject As New Namespace.Child.ChildType

这样做有什么特别的价值吗,或者这是原始程序员习惯于 VB6 做事方式的一个实例?


在 VB6 中,在一行上标注和实例化变量被认为是有问题的,因为它会在访问变量时重新运行实例化(如有必要) - 实际上,以这种方式标注的变量永远不会被测试为 Nothing,因为新实例会按需创建。但是,VB.Net 不保留此约定。

4

2 回答 2

4

不,这是没有意义的。CLR 已经提供了变量初始化为 Nothing 的硬保证。

否则它是完全无害的,抖动优化器将完全删除分配代码。因此,如果原作者更喜欢这种风格,那也没关系。也许他是一名前 C# 程序员,不了解该语言中明确的分配规则。VB.NET 也做了一些检查,但没有那么严格。请检查这是否是您应该遵循的团队标准,希望不是。

于 2013-11-11T19:58:50.240 回答
2

在第一个示例中,无需将声明和赋值分开。

但我在这里想知道(一个假设):既然当你想在代码块(例如:语句)中分配变量时将变量保留在堆栈中时,你应该以这种方式拆分If,也许曾几何时这个块存在并且它被删除保持与它的持续关联。但是,它的关联并没有与其声明合并。


关于关联Nothing到一个空变量:我个人喜欢这种模式。:)

它告诉我自己(在未来的维护中)该变量是故意用空(null)值声明的。New它消除了我可能忘记在类型后面写关键字的疑问。

啊,它还将在构建过程中消除vb.net 警告。

于 2013-11-11T19:46:53.723 回答