代码之家  ›  专栏  ›  技术社区  ›  madcolor

dim x表示新的y,dim x表示新的y()。

  •  5
  • madcolor  · 技术社区  · 15 年前

    复制品

    Whats the difference between declaring as new and as something new something i

    很遗憾,我不知道这一点,但有人能解释一下:

    Dim X as New Y
    

    Dim X as Y = New Y()
    
    3 回复  |  直到 7 年前
        1
  •  13
  •   Jon Skeet    15 年前

    第一个只是推断类型是y。第二个指定它。这允许您编写如下内容:

    Dim X as IList(Of String) = New List(Of String)
    

    这样就限制了选择的范围 List(Of String) -这意味着稍后您可能会选择使用 IList(Of String) ,它仍将编译。

    当然,较短的版本 具有简洁的优点-如果您有很长的类型名(例如使用嵌套的泛型),这一点很重要。匿名类型也需要它,其中 不能 表示X的类型。

        2
  •  8
  •   KyleMit Steven Vachon    11 年前

    乔恩·斯基特已经给出了正确的答案,但我想我会再加一点……

    虽然这不是你的问题,但是

    Dim X = New Y()
    

    Dim X As Y = New Y()
    

    这里的区别实际上取决于您使用的vb.net版本。


    vb.net 7和8

    暗x =新y()
    

    这定义了 X 作为类型的变量 object ( System.Object ,然后创建类型为的对象 Y 并将其分配给 X . 注意这个 只有 当你定义了 Option Strict Off ,否则它甚至无法编译。它实际上只是对vb6和早期版本语法的一种延续,通常是不鼓励的。

    Dim X as Y = New Y()
    

    除此之外,它的作用完全相同 X 现在是强类型,换句话说,它是类型 Y 而不是 对象 (从中继承所有类型,包括装箱时的值类型)。

    vb.net 9及后续版本

    暗x =新y()
    

    这里的区别(对于较新版本的vb.net)是 type inference 在这里生效。因为您没有指定任何类型,但是编译器很明显 New Y() 返回类型为的实例 Y ,它自动推断 X 应该是 Y 比对象更具体。类型干扰也适用于更复杂的表达式。

    Dim x as y=新的y()
    

    这与vb.net 7&8中的情况完全相同。


    总之,你可以有效地替换

    Dim X As New Y()
    

    具有

    暗x =新y()
    

    在vb.net 9中,由于类型推断,编译器将对这两行进行完全相同的解释。但是,在早期版本中,第二行将是弱类型(类型为 对象 )这是不可取的。再说一遍,这不是问题的直接答案,但我认为这可能有助于指出。

        3
  •  3
  •   Justin Niessner    15 年前

    没有区别。VB.NET提供:

    Dim X As New Y
    

    与旧的vb6声明语法在语法上兼容。