是VB';s与C#'相同;s变量?

是VB';s与C#'相同;s变量?,c#,vb.net,C#,Vb.net,这是一个小疑问:在VB上,我可以使用Dim声明变量。在C#中,我可以使用var声明。我更熟悉C#的复杂性,我知道var使用类型推断来确定变量的类型。但我不确定Dim是做什么的 我看起来是这样的,但它没有比较两个关键字。如果有区别,有人能告诉我是哪一种吗?它们不一样Dim简单地表示下面是一个变量声明 例如,这两者是等效的: Dim x As String=“foo” string x=“foo” 在C#中,var表示编译器根据用法(初始化)推断变量声明的类型。在VB中,只要省略声明的类型就可以

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


我看起来是这样的,但它没有比较两个关键字。如果有区别,有人能告诉我是哪一种吗?

它们不一样Dim简单地表示下面是一个变量声明

例如,这两者是等效的:

Dim x As String=“foo”
string x=“foo”
C#
中,var表示编译器根据用法(初始化)推断变量声明的类型。在VB中,只要省略声明的类型就可以实现同样的效果。但是,这也需要激活
选项严格
选项推断

Dim x=“bar”编译器推断x=字符串的类型
var x=“bar”/。

对于c#var:

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

一种看待VB强大功能的方法 Dim操作员就是说

Dim的意思是“我想申报 一个变量,但我不能告诉你太多 关于它的行为直到 后来。”

Dim允许您执行实际的后期绑定,而在C#(今天)中,您使用反射执行后期绑定


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


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

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

这取决于您在vb.net中编写的代码

dim x = 1 
那么它和c#var是一样的

或者你可以写

dim x as integer = 1 
这和c#一样

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

这取决于是否指定了。通常情况下,以下各项是等效的:

'VB.Net
暗myVar
Dim myString=“你好,世界!”
将myString2暗显为String=“你好,世界!”
/C#
对象myVar;
objectmystring=“你好,世界!”//注意类型是object,而不是string!
string myString2=“你好,世界!”;
但是,如果启用了
选项推断
,当变量在同一行上初始化时,
Dim
变得更像
var

'VB.Net
选项推断
暗myVar
Dim myString=“你好!”
/C#
对象myVar;
var myString=“你好!”//或者等效的:string myString=“Hello!”;
请注意,这可能会导致一些混淆,因为在声明点突然初始化变量意味着与稍后初始化变量不同:

'VB.Net
选项推断
暗myVar1
myVar1=10
Dim myVar2=10
myVar1=新的MyClass()'合法
myVar2=新建MyClass()'非法!-“MyClass”类型的值无法转换为“Integer”

这可以通过启用来解决,启用(除其他外)强制在声明时为所有变量指定一个类型(隐式或非隐式)。

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


如果在你的脑海中,你忽略了
暗淡的部分
,比较剩下的部分,你会发现VB和C非常相似,只是C做得不对(你可以猜到我是用哪种语言长大的),并且像C一样,把类型放在第一位(或者使用
var
)接下来是变量的名称。

除了您已经遇到的问题之外,还需要进一步澄清,请研究早期绑定与晚期绑定。这就是两者的核心区别。使用
选项,推断开启
代码,例如
Dim myVar1
不再工作:
推断开启
严格关闭
是相互排斥的(除非他们在VB10中改变了这一点)。@Konrad:我很确定这不是真的。明确指出,
选项Strict
可以是
打开
关闭
。而且,我刚刚测试过,它工作正常。那我一定是记性不好。奇怪……我很肯定编译器会抱怨如果使用
expert
时没有
Strict
;是的,你明白了!var告诉编译器您想要声明一个特定的类型,请记住,C#是特定于类型的,不像vb那样是类型/对象解释的“远离vb”
int x = 1;