2011-04-15 13 views
18

Esta es una pequeña duda: en VB, puedo declarar variables usando Dim. En C#, puedo declarar luego usando var. Estoy más familiarizado con las complejidades de C#, y sé que var usa tipo de inferencia para determinar el tipo de la variable. Pero no estoy seguro de qué hace 'Dim'.¿Los VB son tan pequeños como la var de C#?

Me parece this question en SO, pero no se comparan ambas palabras clave. Si hay una diferencia, ¿alguien me puede decir cuál?

+1

Para obtener más aclaraciones, además de lo que ya ha descubierto, busque enlaces iniciales o finales. Esa es la diferencia entre los dos en el núcleo. –

Respuesta

18

Eso depende si Option Infer es speci fied. Normalmente, los siguientes son equivalentes:

'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!"; 

Sin embargo, con Option Infer habilitado, Dim se vuelve más como var cuando la variable se inicializa en la misma línea:

'VB.Net 
Option Infer On 
Dim myVar 
Dim myString = "Hello!" 
//C# 
object myVar; 
var myString = "Hello!"; //Or the equivalent: string myString = "Hello!"; 

Tenga en cuenta que esto puede llevar a cierta confusión porque, de repente, inicializar una variable en el punto de declaración significa algo diferente de inicializarlo más tarde. :

'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' 

Esto se puede solucionar al permitir Option Strict, que (entre otras cosas) obliga a todas las variables que debe darse un tipo (implícita o no) en el momento de la declaración.

+0

Con el código de 'Option Infer On' como 'Dim myVar1' ya no funciona:' Infer On' y 'Strict Off' son mutuamente excluyentes (a menos cambiaron eso en VB10). –

+0

@Konrad: estoy bastante seguro de que eso no es cierto. La [documentación de VB9 para 'Option Infer'] (http://msdn.microsoft.com/en-us/library/bb384665%28VS.90%29.aspx) menciona explícitamente que' Option Strict' puede ser 'On' o 'Off '. Además, acabo de probarlo y funciona bien. –

+0

Entonces debo tener una memoria incorrecta. Extraño ... Estaba bastante seguro de que el compilador se quejó si 'Infer' se usó sin' Strict'. –

14

No son lo mismo. Dim en VB simplemente significa que lo que sigue es una declaración de variable.

Por ejemplo, estos dos son equivalentes:

Dim x As String = "foo" 
string x = "foo" 

En C#, var significa que el tipo de una declaración de variables se infiere por el compilador en función del uso (inicialización). Lo mismo se puede lograr en VB simplemente omitiendo el tipo de declaración. Sin embargo, esto también requiere que Option Strict y Option Infer se activan:

Dim x = "bar" ' Compiler infers type of x = string 
var x = "bar" // same here. 
1

está allí this from Scott Hanselman

para C# var:

... [var es] una nueva palabra clave que significa, "Quiero declarar una variable, pero yo ' m demasiado flojo para escribir su tipo ".

Una manera de mirar el poder de operador Dim de VB es decir,

Dim tipo de medios, "Quiero declarar una variable pero no se puede decir mucho acerca de cómo se comporta hasta mucho después ".

Dim le permite hacer el encuadernado real en tiempo real, mientras que en C# (hoy) se encuaderna con reflexión.

0

Dim significa 'dimensión', y se utiliza en VB.Net para declarar una variable. Básicamente, implica "Reservce some/enough space" para mantener un tipo de _ _ '. El tipo de datos viene más tarde; usualmente en la misma línea.

var en C#, como mencionas, es en realidad un atajo para indicar al compilador que infiera el tipo de datos en función del valor asignado por primera vez.

+0

Pensé que significaba "declarar en memoria" –

+0

@Steve; Sí, lo tienes! http://stackoverflow.com/questions/1033507/what-does-dim-stand-for-in-visual-basic-and-basic –

0

la palabra clave var se escribe específicamente por el tipo de datos que se le asigna en la variable. Pero dim es invariante y se puede usar para cualquier tipo.

+0

var le dice al compilador que desea declarar un tipo específico, tenga en cuenta que C# es Tipo específico no como vb que es Tipo/objeto interpretado "MANTENER ALEJADO DE VB" – MethodMan

1

Dim en VB no hace nada, solo es una palabra clave que significa que el resto de la declaración tiene que ver con la declaración de una variable. Es una palabra clave BASIC de las nieblas del tiempo que significa 'dimensión' cuando no se podían declarar variables ordinarias, pero sí se tenía que declarar la 'dimensión' de las matrices.

Si, en su opinión, ignora el Dim y compara lo que queda, encontrará VB y C# bastante similares, excepto que C# lo hace al revés (Puede adivinar con qué idioma crecí) y , como C, pone el tipo primero (o usa var) y el nombre de la variable siguiente.

Cuestiones relacionadas