Eventuali duplicati:
Difference between “var” and “object” in C#var vs oggetto in C#
vorrei conoscere la differenza tra var e oggetto.
Quando utilizzare Var e quando utilizzare l'oggetto.
Pro e contro del loro utilizzo.
Eventuali duplicati:
Difference between “var” and “object” in C#var vs oggetto in C#
vorrei conoscere la differenza tra var e oggetto.
Quando utilizzare Var e quando utilizzare l'oggetto.
Pro e contro del loro utilizzo.
var
è semplicemente una scorciatoia per "lasciare che il compilatore scelga il tipo di variabile corretto per me" (l'inferenza di tipo in fase di compilazione è il termine più esatto).
object
, d'altra parte, è un tipo specifico; tutti gli altri tipi di riferimento derivano da object
, quindi è possibile assegnare qualsiasi elemento a una variabile di tipo object
.
A meno che non sia un primitivo, nel qual caso deve essere inserito prima di essere assegnato al 'Oggetto' riferimento. –
Penso che qualcosa che dovrebbe essere aggiunto alla risposta selezionata sia che se usi var
allora come @Ben Voigt ha detto, puoi fare cose sull'oggetto memorizzato in var senza doverlo lanciare. –
Eric
var
è la risposta quando ti ritrovi a chiedere, ne ho veramente necessario digitare nome del tipo di quella lunga due volte, nel es .:
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>>>>();
Perché non è amico, non è vero. Utilizzare var
invece:
var myDict = new Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>();
Ora myDict
è davvero un Dictionary<string, Func<List<Func<int, int, double>>, IEnumerable<Tuple<double, string>>>>
, in modo da poter aggiungere le cose ad esso, enumerare esso, ecc
Se ha dichiarato come object
non si poteva fare qualsiasi operazione con esso che sono forniti da Dictionary
, solo quelli validi per tutti gli oggetti.
Mi piacerebbe vedere quel codice in azione. –
Il tuo computer con Windows? j/k. Ho inventato quel tipo particolare ma stavo provando abbastanza duramente ad usare i tipi che potrebbero realmente essere uniti insieme. –
@Joe, non vorrei ... – 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();
Nel primo esempio, il compilatore sa che foo
è una stringa e così può chiamare metodi delle stringhe sulla foo
.
Nel secondo esempio, abbiamo "trasmesso" la stringa foo
a un oggetto. Ora il compilatore non sa (perché non dovrebbe sapere!) Che bar
è in realtà una stringa e non possiamo chiamare i metodi stringa su bar
. Il compilatore non consentirà il downcast implicito da un oggetto (o qualsiasi tipo di base) a un tipo derivato (come System.String
). Fa parte delle regole di sicurezza del tipo a tempo di compilazione.
var è ancora fortemente digitato ma con l'oggetto è necessario eseguire il cast di tutto.
Sembra estremamente simile a http://stackoverflow.com/questions/1552881/difference-between-var-and-object-in-c – Mathias