Domanda

Aiutami accontento un argomento qui.

E 'questo:

SqlCommand cmd = new SqlCommand( "sql cmd", conn);

trattata esattamente lo stesso di questo:

const string s = "sql cmd";
SqlCommand cmd = new SqlCommand( s, conn);

Ie. vuol fare la differenza se affermo espressamente che la stringa s è un const.

E, se non viene trattato nello stesso modo, perché no?

È stato utile?

Soluzione

In quest'ultimo frammento, non è che il stringa è const - è che il variabile è const. Questo non è proprio la stessa const in C ++. (Le stringhe sono sempre immutabile in .NET.)

E sì, i due frammenti fanno la stessa cosa. L'unica differenza è che nella prima forma avrai una voce di metadati per s pure, e se la variabile è dichiarata a livello di tipo (invece di essere una variabile locale) e poi altri metodi potrebbe usarlo troppo. Naturalmente, a causa della stringa di internato se si utilizza "cmd SQL" altrove avrai ancora solo una singola stringa oggetto in memoria ... ma se si guarda al tipo con la riflessione troverete const come un campo nei metadati con il secondo frammento di se è dichiarato come un campo costante, e se è solo una variabile locale sarà nel file PDB se si costruisce uno.

Altri suggerimenti

Il valore di un const sempre viene bruciato direttamente nel chiamante, quindi sì sono identici.

Inoltre, gli stagisti compilatore stringhe trovate nel codice sorgente - un const è utile se si utilizza la stessa stringa più volte (puramente da un angolo di manutenzione - il risultato è lo stesso in entrambi i casi)

.

il costruttore del SqlCommand non "vedere" alcuna differenza, e, pertanto, agire allo stesso modo.

Sì, quelle sono esattamente gli stessi.

Sì, sentitevi liberi di utilizzare Reflector a guardare il montaggio, const stringhe saranno sostituite con le stringhe letterali su compilation. Ho anche un post sul blog su questo per sicuro il lavoro di utilizzare Reflector:)

Non sono sicuro al 100% su questo, ma io scommetto che è lo stesso.

const sarà solo fare in modo di non reassing la variabile, ma è qualcosa che può essere fatto al momento della compilazione.

Senza dimenticare che le stringhe sono inmutable, quindi non credo che farà alcuna differenza dichiarare una variabile o meno.

Tuttavia, la definitiva prova sarebbe studiando il codice IL generato in entrambi i casi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top