Is VB's Dim the same as C#'s var?
这是一个小小的疑问:在VB中,我可以使用dim声明变量。在C中,我可以使用
我似乎一直在问这个问题,但它没有比较两个关键词。如果有什么不同,有人能告诉我是哪一个吗?
这取决于是否指定了
1 2 3 4 | 'VB.Net Dim myVar Dim myString ="Hello world!" Dim myString2 As String ="Hello world!" |
1 2 3 4 | //C# object myVar; object myString ="Hello world!"; //Notice type is object, *not* string! string myString2 ="Hello world!"; |
但是,在启用
1 2 3 4 | 'VB.Net Option Infer On Dim myVar Dim myString ="Hello!" |
1 2 3 | //C# object myVar; var myString ="Hello!"; //Or the equivalent: string myString ="Hello!"; |
请注意,这可能会导致一些混乱,因为在声明点突然初始化变量意味着与以后初始化变量不同:
1 2 3 4 5 6 7 8 | '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' |
这可以通过启用
它们不一样。vb中的
例如,这两个是等效的:
1 | Dim x As String ="foo" |
1 | string x ="foo" |
在
1 | Dim x ="bar" ' Compiler infers type of x = string |
1 | var x ="bar" // same here. |
这取决于你在vb.net上写的
1 | dim x = 1 |
那么它与C var相同。
或者你可以写
1 | dim x as integer = 1 |
和C一样#
1 | int x = 1; |
从vb.net 9.0开始,不需要使用带有initialize语句的类型
http://msdn.microsoft.com/en-us/library/ms364068(v=vs.80).aspx
vb中的
如果,在你的头脑中,你忽略了
这是斯科特·汉塞尔曼写的
For c# var:
...[var is] a new keyword that means,
"I want to declare a variable, but I’m
too lazy to write out its type."One way to look at the power of VB's
Dim operator is to say,Dim kind of means,"I want to declare
a variable but I can't tell you much
about how it behaves until much
later."Dim lets you do actual late-binding while in C# (today) you do late-binding with reflection.
var关键字是由变量中指定的数据类型指定的。但dim是不变的,可以用于任何类型。
正如您所提到的,c中的