2010-03-13 15 views
5

Nel seguente metodo,L'uso di const in un metodo

public void InspectList(IList<int> values) 
{ 
    if(values != null) 
    { 
     const string format = "Element At {0}"; 
     foreach(int i in values) 
     { 
      Log(string.Format(format, i)); 
     } 
    } 
} 

se il suo utilizzo const forniscono alcun beneficio sopra solo dichiarando la stringa come una stringa? Non sarà comunque internato?

risposta

4

Vero, in entrambi i casi sarà internato.

Contrassegnarlo come const rende il vostro significato più chiaro - do not touch this string variable, do not assign a different value to it.

1

Ecco come il codice finale sarà simile nei due casi:

  • Utilizzando const:

    public void InspectList(IList<int> values) 
    { 
        if(values != null) 
        { 
         foreach(int i in values) 
         { 
          Log(string.Format("Element At {0}", i)); 
         } 
        } 
    } 
    
  • Senza const:

    public void InspectList(IList<int> values) 
    { 
        if(values != null) 
        { 
         string format = "Element At {0}"; 
         foreach(int i in values) 
         { 
          Log(string.Format(format, i)); 
         } 
        } 
    } 
    

Quindi, in nel secondo caso ne avrai uno aggiuntivo dichiarata variabile locale, ma IMHO la differenza sarebbe microscopica.

+2

Ciò dipende dall'ottimizzatore. Sto supponendo che l'attuale compilatore MS C# produrrà un risultato simile al tuo ma non sono sicuro di eventuali differenze nel codice binario risultante dopo che il codice IL è stato compilato –

1

Ci sono molti motivi per cui dichiarare qualcosa che è costante come const. Prima di tutto dice a chiunque di leggere il codice che il valore rimarrà lo stesso, che l'udentificatore è semplicemente un alias per il valore. In secondo luogo, un ottimizzatore avrebbe un compito più semplice capire se il valore di un identificatore poteva essere cambiato tra due letture. Dichiarare il costo lo rende molto semplice poiché non può cambiare. Per me la prima ragione è la più importante. Scrivere codice che mostri chiaramente l'intenzione è per me una delle abitudini più importanti che uno sviluppatore potrebbe avere.

Problemi correlati