通过一些旧的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不保留这种约定。
答案 0 :(得分:4)
不,这没有意义。 CLR已经提供了一个硬保证,即变量初始化为Nothing。
否则完全无害,抖动优化器将完全删除分配代码。因此,如果原作者更喜欢那种风格,那就没关系。也许他是一名前C#程序员,并不理解该语言的明确分配规则。 VB.NET也进行了一些检查,但它并没有那么严格。检查这是否是你应该遵循的团队标准,希望不是。
答案 1 :(得分:2)
在第一个例子中,没有必要将声明和赋值分开。
但是我想知道这里(一个假设):因为当你想要在代码块中分配变量(例如:If
语句)时将变量保留在堆栈中时,你应该这样分割,也许一次在这个区块存在的时候,它被移除并保持与它的恒定关联。
但是,它的关联并未与其声明合并。
关于将Nothing
与空变量相关联:我个人喜欢这种模式。 :)
它告诉我自己(在将来的维护中)该变量是故意用空(null)值声明的。它消除了我可能忘记在类型后面写New
关键字的疑问。
啊,它还会在构建过程中消除a vb.net warning。