2009-10-12 21 views
42

¿El tipo var es equivalente a Variant en VB? Cuando object puede aceptar cualquier tipo de datos, ¿cuál es la diferencia entre esos dos?Diferencia entre "var" y "objeto" en C#

+15

Simplemente espere hasta que 'dynamic' agregue aún más confusión ;-p –

+5

;) en ese caso también ustedes están aquí para ayudarme! – user184805

Respuesta

49

A partir de Visual C# 3.0, las variables que se declaran en el alcance del método pueden tener un tipo implícito var. Una variable local implícitamente tipada se escribe fuertemente como si hubiera declarado el tipo usted mismo, pero el compilador determina el tipo. Los siguientes dos declaraciones de i son funcionalmente equivalentes:

var i = 10; //implicitly typed 
int i = 10; //explicitly typed 

var no es objeto

además se debería leer esto: C# 3.0 - Var Isn't Object

6

Nope - var solo significa que está dejando que el compilador deduzca el tipo de la expresión utilizada para asignar un valor a la variable.

Es sólo el azúcar sintaxis para dejar que hagas menos escribir - trate de hacer un parámetro de método de tipo "var" y ver lo que sucede:]

Así que si usted tiene una expresión como:

var x = new Widget(); 

x será del tipo Widget, no object.

+6

Hace más que guardar la escritura: 'var' es la única forma de tratar con tipos anónimos. – Kobi

+0

¡Oh, sí, se olvidó de eso! –

6

las otras respuestas están justo en, que acababa de me gusta agregar que puedes poner tu cursor en la palabra clave 'var' y presionar F12 para saltar a la declaración de tipo inferido.

+8

O simplemente puede dejar el cursor en "var" un poco más y ver el tipo inferido en la información sobre herramientas; o) - Cédric hace 1 minuto –

+0

Hola, cuando coloco el cursor sobre var y presiono F12, estoy navegando al objeto System.Object, así que estoy navegado cuando coloco el cursor sobre el objeto y presiono F12. Cualquier explicación sobre esto ... Espero que ambos sean los mismos – Saravanan

0

Adición al poste.

Parent p = new Parent(); 
Child c = new Child();//Child class derives Parent class 
Parent p1 = new Child(); 

Con lo anterior, solo puede acceder a las propiedades principales (p1) aunque contenga referencia de objeto hijo.

var p= new Parent(); 
var c= new Child(); 
var p1 = new Child(); 

Al usar 'var' en lugar de la clase, tiene acceso a las propiedades de la clase primaria y secundaria. se comporta como crear un objeto para la clase infantil.

-1

una diferencia es el boxeo y el desempaquetado con objetos.

+0

El concepto de boxeo y desembalaje se relaciona con los tipos de valores de conversión a los tipos de referencia y viceversa, p. mientras se almacena el valor entero en una lista de matriz. var no tiene nada que ver con objetos o boxeo/unboxing.Este es solo un truco del compilador para eliminar la gran cantidad de pelusas involucradas en los métodos debido a los nombres de los tipos. p.ej. Ahora en lugar de 'ApplicationInstallerForBase obj = new ApplicationInstallerForBase();' simplemente escribo 'var obj = new ApplicationInstallerForBase();'. 'ApplicationInstallerForBase' es una clase en mi aplicación. _Nota_: no he votado negativamente tu publicación. – RBT

Cuestiones relacionadas