这是一个小小的疑问:在VB上,我可以使用Dim声明变量。在C#中,我可以使用var
声明。我更熟悉C#的复杂性,我知道var
使用类型推断来确定变量的类型。但我不确定'Dim'是做什么的。
我在SO上似乎this question,但它没有比较两个关键字。如果有区别,有人可以告诉我哪个?
答案 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 Strict
和Option 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)
对于c#var:
... [var is]一个新的关键字,意思是, “我想宣布一个变量,但我是 懒得写出它的类型。“
一种看待VB的力量的方法 昏暗的操作员就是说,
昏暗的手段,“我想宣布 变量,但我不能告诉你太多 关于它如何表现直到很多 后“。Dim让你在C#(今天)中进行实际的后期绑定,你可以用反射进行后期绑定。
答案 4 :(得分:1)
VB中的Dim
本身没有做任何事情,它只是一个关键字,意味着声明的其余部分与声明变量有关。当你无法声明普通变量时,它是来自时间迷雾的BASIC
关键词,意思是'维度',但你必须声明数组的'维度'。
如果,在你的脑海中,你忽略了Dim
并比较剩下的东西你会发现VB和C#非常相似,只不过C#做错了(你可以猜出我长大了哪种语言) with)和C一样,首先放置类型(或使用var
),然后放置变量的名称。
答案 5 :(得分:0)
Dim
表示'维度',在VB.Net中用于声明变量。它基本上意味着'保留一些/足够的空间来容纳一种 _ _'。数据类型稍后会出现;通常在同一条线上。
var
实际上是一个快捷方式,告诉编译器根据首次分配的值推断数据类型。
答案 6 :(得分:0)
var关键字是由在变量中分配的数据类型专门键入的。 但是dim是不变的,可以用于任何类型。