使用Nothing实例化变量,然后分配New对象实例

时间:2013-11-11 19:27:16

标签: vb.net coding-style

通过一些旧的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

OR

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

OR,如@helrich所建议的

Dim objMyObject As New Namespace.Child.ChildType

这样做是否有任何特殊价值,或者这是原始程序员的一个实例用于VB6的做事方式?


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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

在第一个例子中,没有必要将声明和赋值分开。

但是我想知道这里(一个假设):因为当你想要在代码块中分配变量(例如:If语句)时将变量保留在堆栈中时,你应该这样分割,也许一次在这个区块存在的时候,它被移除并保持与它的恒定关联。 但是,它的关联并未与其声明合并。


关于将Nothing与空变量相关联:我个人喜欢这种模式。 :)

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

啊,它还会在构建过程中消除a vb.net warning