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 Strict
和Option 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关键字是由在变量中分配的数据类型专门键入的。 但昏暗是不变的,可用于任何类型。