2010-01-24 23 views
13

Al tomar C#, parece que no puede encontrar ninguna referencia útil a esto, aparte de los ejemplos.¿Cuál es el equivalente de la declaración "Dim" de VB en C#?

Entonces, ¿qué es Dim en C#?

+1

¿Estás preguntando lo que el equivalente C# de Dim de VB.net es? – spender

+0

para el caso, ¿qué significa 'Dim' en VB.NET? Sé para qué se usa, pero todavía no sé lo que se supone que significa. –

+0

@Ben Dim es la abreviatura de dimensión – PeanutPower

Respuesta

18

En VB, Dim declara una variable de un tipo particular (o de tipo variable, si no especifica uno). Si Dim x as Foo, declara una variable de tipo Foo llamada x.

En C#, el equivalente es indicar el tipo seguido del nombre de la variable, como en:

Foo x; 
int i; 

También puede asignar en el mismo paso:

Foo x = new Foo(); 
int i = 6; 

C# soporta la inferencia de tipos , por lo que también puede hacer:

// Compiler infers type of x and i based on this assignment. 
var x = new Foo(); // x is now of type Foo 
var i = 10;  // i is now of type int 

un Dim sin un tipo correspondiente en VB es similar a declarar un tipo que Object en C#:

object o = ...; // An object instance can hold any value or reference type. 
+1

sí, pero var fue introducido principalmente para LINQ y si lo hace 'var MyVar = 500; MiVar = "Cambio de cadena"; 'Usted recibirá un error .. otros lenguajes no tienen esta restricción –

+0

El último es un ejemplo de una variable de tipo implícito; la inferencia tipo es diferente. – jason

+1

@Roboto: C# está en gran parte estáticamente estátipo.No puede hacer lo que describe porque el tipo de variable no es mutable: una vez que declara como un tipo, así es como se mantiene. @Jason: la tipificación implícita no puede ocurrir sin inferencia de tipo. Están muy íntimamente relacionados. Básicamente, la inferencia de tipo es lo que ocurre en el "lado derecho", de modo que el compilador puede vincular 'i' a un tipo particular. –

1

El equivalente similar sería como

object Obj; 

o cualquier otro tipo de datos tales como

int myInt; 
string myString; 

var también podría ser utilizado como implícitamente mecanografiadas. Otros se escribirían explícitamente. var se introdujo para consultas LINQ sin embargo.

16

Suponiendo que quiere decir Dim en VB, C# utiliza ya sea var o el nombre del tipo de declarar un nuevo tipo

string myString = "Hello"; 
// is the same as 
var myString = "Hello"; // type is inferred 

Tenga en cuenta que la palabra clave var no es un tipo de variante, al igual que en VB. Es un implicitly typed variable.

0

Dim es una palabra clave utilizada para la declaración de variables utilizadas en VB.NET. No sé sobre ningún uso en C#. Yo diría que su equivalente sería la palabra clave var, siempre que estemos hablando de VB 9 y C# 3. Pero creo que es inútil pelear sobre los detalles antes de saber cuál es la pregunta prevista de todos modos;)

+0

downvoted;. no existe un equivalente de "Dim" en C# en Visual Basic, la palabra clave Dim se utiliza para. declarar una variable. En C#, este intento está implícito en el uso de un tipo para comenzar una declaración. La palabra clave var en C# se puede usar en lugar de un nombre de tipo, pero sigue siendo un tipo fuerte, y requiere que la variable sea inicializado en el mismo enunciado. El tipo utilizado para la variable se deduce del tipo de datos asignados al va riable. –

+1

Tiene toda la razón, lo único que hace que Dim ** aproximadamente ** equivalente a var sea que se usan para declarar una variable en ambos idiomas. Sin embargo, en la versión 9 de VB, activando Option Infer, puedes hacer que se comporten de una manera muy similar. –

0

puedo sugerir Learning C# 3.0 (y más tarde, tal vez C# 3.0 in a Nutshell y C# in Depth) para aprender C#. Probablemente sea una buena idea aprender los fundamentos del lenguaje y comenzar a "pensar en C#", en lugar de tratar de "traducir" o "convertir" tus pensamientos de VB a C# (o cualquier otro idioma, para el caso).


Editar: Dicho esto; desea comparar el nuevo idioma que está aprendiendo con el que ya conoce mientras avanza, para aprender las diferencias entre los idiomas.En mi opinión, cuando aprendes un nuevo idioma, se trata más de captar los principios y las diferencias fundamentales :)

+1

No recomendaría C# en profundidad en términos de cómo comenzar. Realmente está dirigido a personas que ya tienen una comprensión razonable de C# 1. –

+0

@Skeet: Estoy de acuerdo. Creo que debería haber sido más claro en eso. El primero (Learning C# 3.0) fue un gran libro para comenzar, al menos eso creía. PD: me siento honrado de que hagas un comentario sobre mi respuesta ^^ – Leif

7

Esto es realmente un poco complicado, porque Dim se puede usar de varias maneras. El primer caso es si proporciona explícitamente el tipo de la variable al declararlo. En este caso, corresponde a la declaración C# que contiene el nombre del tipo:

// Visual Basic 
Dim num as Integer 
// C# 
int num; 

El segundo caso es si se utiliza una expresión de inicialización, pero no se especifica el tipo de forma explícita. En este caso, VB (al menos las versiones más recientes) usan la inferencia de tipo para deducir el tipo. Esto corresponde a C# var palabra clave:

// Visual Basic 
Dim str = "Hello world" 
// C# 
var str = "Hello world" 

Por último, hay un tercer caso - se puede declarar la variable de Visual Basic sin dar ningún tipo y sin proporcionar la expresión de inicialización (al menos con Option Strict apagado). En este caso, VB.NET declara la variable como un valor de tipo Object, pero también le permite invocar cualquier método del objeto. Esto es bastante cercano a lo que C# 4.0 lo hace con el nuevo dynamic palabra clave:

// Visual Basic 
Dim sth 
sth = new Random() 
sth.Next() 

// C# 
dynamic sth; 
sth = new Random(); 
sth.Next(); 

[EDIT]
Finalmente, el último caso de uso Dim en Visual Basic es declarar matrices. En C#, las matrices son tratados como cualquier otro tipo de datos, por lo que la declaración es similar a lo que he escrito antes de enteros/cadenas:

// Visual Basic 
Dim ints(10, 10) as Integer 
// C# - we need to initialize the array if size is specified 
int[,] ints = new int[10, 10]; 
// C# - we can use type inference too 
var ints = new int[10, 10]; 

[/ EDIT]

(no estoy realmente un VB experto, pero creo que estos son los tres casos posibles. Por favor, corríjanme si me equivoco!)

Cuestiones relacionadas