【问题标题】:Is VB's Dim the same as C#'s var?VB 的 Dim 和 C# 的 var 一样吗?
【发布时间】:2011-04-15 15:21:07
【问题描述】:

这是一个小疑问:在 VB 上,我可以使用 Dim 声明变量。在 C# 中,我可以使用 var 进行声明。我更熟悉 C# 的复杂性,我知道 var 使用 type inference 来确定变量的类型。但我不确定“Dim”是做什么的。

我在 SO 上似乎是 this question,但它没有比较两个关键字。如果有区别,谁能告诉我?

【问题讨论】:

  • 除了您已经遇到的内容之外,要获得更多说明,请研究早期绑定与后期绑定。这就是两者的核心区别。

标签: c# vb.net


【解决方案1】:

这取决于是否指定了Option Infer。通常,以下是等价的:

'VB.Net
Dim myVar
Dim myString = "Hello world!"
Dim myString2 As String = "Hello world!"
//C#
object myVar;
object myString = "Hello world!"; //Notice type is object, *not* string!
string myString2 = "Hello world!";

但是,启用Option Infer 后,当变量在同一行初始化时,Dim 变得更像var

'VB.Net
Option Infer On
Dim myVar
Dim myString = "Hello!"
//C#
object myVar;
var myString = "Hello!"; //Or the equivalent:  string myString = "Hello!";

请注意,这可能会导致一些混乱,因为在声明点突然初始化变量意味着与稍后初始化它不同:

'VB.Net
Option Infer On
Dim myVar1
myVar1 = 10
Dim myVar2 = 10

myVar1 = New MyClass() 'Legal
myVar2 = New MyClass() 'Illegal! - Value of type 'MyClass' cannot be converted to 'Integer'

这可以通过启用Option Strict 来解决,这(除其他外)强制所有变量在声明时被赋予一个类型(无论是否隐含)

【讨论】:

  • 使用Option Infer On 代码,例如Dim myVar1 不再起作用:Infer OnStrict Off 是互斥的(除非它们在 VB10 中更改了它)。
  • @Konrad:我很确定这不是真的。 VB9 documentation for Option Infer 明确提到 Option Strict 可以是 OnOff。另外,我刚刚测试了它,它工作正常。
  • 那我一定是记错了。奇怪……我很确定如果在没有Strict 的情况下使用Infer,编译器会抱怨。
【解决方案2】:

它们不一样。 VB 中的Dim 只是表示后面是一个变量声明。

例如,这两个是等价的:

Dim x As String = "foo"
string x = "foo"

C# 中,var 表示编译器根据使用情况(初始化)推断变量声明的类型。通过简单地省略声明的类型,可以在 VB 中实现相同的目的。但是,这也需要激活Option StrictOption Infer

Dim x = "bar" ' Compiler infers type of x = string
var x = "bar" // same here.

【讨论】:

    【解决方案3】:

    这取决于你在 vb.net 中编写

    dim x = 1 
    

    那么它与 c# var 相同。

    或者你可以写

    dim x as integer = 1 
    

    和c#一样

    int x = 1;
    

    从 vb.net 9.0 开始,您不需要具有初始化语句的类型

    http://msdn.microsoft.com/en-us/library/ms364068(v=vs.80).aspx

    【讨论】:

      【解决方案4】:

      this from Scott Hanselman

      对于 c# 变量:

      ...[var is] 一个新的关键字,意思是, “我想声明一个变量,但我 懒得写出它的类型。”

      了解 VB 强大功能的一种方式 昏暗算子就是说,

      Dim 的意思是,“我要声明 一个变量,但我不能告诉你太多 关于它的行为直到很多 稍后。”

      Dim 允许您进行实际的后期绑定,而在 C# 中(今天)您可以使用反射进行后期绑定。

      【讨论】:

        【解决方案5】:

        VB 中的Dim 本身不做任何事情,它只是一个关键字,意味着语句的其余部分与声明变量有关。它是来自时间迷雾的BASIC 关键字,当您无法声明普通变量时,它意味着“维度”,但您必须声明数组的“维度”。

        如果在您的脑海中,您忽略了Dim 并比较剩下的内容,您会发现 VB 和 C# 非常相似,只是 C# 做错了(您可以猜到我是用哪种语言长大的)并且和 C 一样,将类型放在首位(或使用 var),然后是变量名。

        【讨论】:

          【解决方案6】:

          Dim 表示“维度”,在 VB.Net 中用于声明变量。它基本上意味着“保留一些/足够的空间来容纳一种类型的__”。数据类型稍后出现;通常在同一行。

          如您所述,C# 中的var 实际上是告诉编译器根据首先分配的值推断数据类型的快捷方式。

          【讨论】:

          【解决方案7】:

          var 关键字由它在变量中分配的数据类型明确键入。 但是 dim 是不变的,可以用于任何类型。

          【讨论】:

          • var 告诉编译器您要声明特定类型,请记住,C# 是特定于类型的,而不像 vb,后者是类型/对象解释为“远离 VB”
          猜你喜欢
          • 2016-09-23
          • 2021-09-25
          • 2022-08-18
          • 2013-12-02
          • 1970-01-01
          • 2013-03-03
          • 2017-06-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多