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

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

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

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

他们不一样。 在VB中调暗只是意味着接下来是变量声明。

例如,这两个是等价的:

 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. 

这取决于你在vb.net写的

 dim x = 1 

然后它与c#var相同。

或者你可以写

 dim x as integer = 1 

这与c#相同

 int x = 1; 

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

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

斯科特汉塞尔曼就是这样的

对于c#var:

… [var是]一个新的关键字,意思是“我想声明一个变量,但我太懒了,不能写出它的类型。”

查看VB的Dim运算符的一种方法就是说,

昏暗的方式,“我想声明一个变量,但我不能告诉你很多关于它如何表现,直到很久以后。”

Dim让你做实际的后期绑定,而在C#(今天)你用reflection进行后期绑定。

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

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

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

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

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