VB的Dim和C#的var一样吗?

时间:2011-04-15 15:21:07

标签: c# vb.net

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

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

7 个答案:

答案 0 :(得分:18)

这取决于是否指定了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来修复,其中({等等})强制所有变量在声明时被赋予类型(隐式或非隐式)

答案 1 :(得分:14)

他们不一样。 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.

答案 2 :(得分:2)

这取决于你在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

答案 3 :(得分:1)

this from Scott Hanselman

  

对于c#var:

     

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

     

一种看待VB的力量的方法   昏暗的操作员就是说,

     昏暗的手段,“我想宣布   变量,但我不能告诉你太多   关于它如何表现直到很多   后“。

     

Dim让你在C#(今天)中进行实际的后期绑定,你可以用反射进行后期绑定。

答案 4 :(得分:1)

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

如果,在你的脑海中,你忽略了Dim并比较剩下的东西你会发现VB和C#非常相似,只不过C#做错了(你可以猜出我长大了哪种语言) with)和C一样,首先放置类型(或使用var),然后放置变量的名称。

答案 5 :(得分:0)

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

正如您所提到的,C#中的

var实际上是一个快捷方式,告诉编译器根据首次分配的值推断数据类型。

答案 6 :(得分:0)

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