Duplicar posible:
Difference between “var” and “object” in C#var vs objetos en C#
me gustaría saber la diferencia entre var y objeto.
Cuándo usar Var y cuándo usar Object.
Ventajas y desventajas de su uso.
Duplicar posible:
Difference between “var” and “object” in C#var vs objetos en C#
me gustaría saber la diferencia entre var y objeto.
Cuándo usar Var y cuándo usar Object.
Ventajas y desventajas de su uso.
var
es sólo una abreviatura de "dejar que el compilador elija el tipo de variable correcto para mí" (la inferencia de tipo en tiempo de compilación es el término más exacto).
object
, por otro lado, es un tipo específico; todos los otros tipos de referencia derivan de object
, por lo que puede asignar cualquier cosa a una variable del tipo object
.
A menos que sea una primitiva, en cuyo caso debe estar en la caja antes de ser asignada en el 'Referencia de objeto'. –
Creo que algo que debería agregarse a la respuesta seleccionada es que si usa var
, como dijo @Ben Voigt, puede hacer cosas al objeto almacenado en var sin tener que emitirlo. –
Eric
var
es la respuesta cuando usted se encuentra preguntando, es lo que realmente tiene que escribir el nombre del tipo que siempre dos veces, en ej .:
Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>> myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();
¿Por qué no es amigo, no lo hace. Utilice var
lugar:
var myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();
ahora myDict
realmente es una Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>
, lo que puede añadir cosas a la misma, que enumerar, etc.
Si lo declaró como object
no se podía hacer ninguna operación con él proporcionados por Dictionary
, solo los válidos para todos los objetos.
Me encantaría ver ese código en acción. –
¿Su computadora con Windows? j/k. Inventé ese tipo en particular, pero estaba tratando de usar tipos que realmente podrían combinarse entre sí. –
@Joe, yo no ... – jonnystoten
var foo = "Hello, I am a string!";
// foo is a string, so this compiles
var fooCharArray = foo.ToCharArray();
object bar = foo;
// bar is not a string, so this does not compile
var barCharArray = bar.ToCharArray();
En el primer ejemplo, el compilador sabe que foo
es una cadena y por lo que podemos llamar a métodos de las cadenas de foo
.
En el segundo ejemplo, "upcast" la cadena foo
a un objeto. Ahora el compilador no sabe (porque no debería saber) que bar
es en realidad una cadena, y no podemos llamar a los métodos de cadena en bar
. El compilador no permitirá downcasting implícito de un objeto (o cualquier tipo de base) a un tipo derivado (como System.String
). Es parte de las reglas de seguridad del tipo de tiempo de compilación.
var todavía está fuertemente tipado pero con el objeto tendrás que echar todo.
Se ve muy similar a http://stackoverflow.com/questions/1552881/difference-between-var-and-object-in-c – Mathias