2010-03-13 28 views
5

En el siguiente método,El uso de const en un método

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)); 
     } 
    } 
} 

¿El uso de const proporciona ningún beneficio sobre acaba de declarar la cadena como una cadena? ¿No sería internado de todos modos?

Respuesta

4

Cierto, en ambos casos será internado.

Marcarlo como const hace que su significado sea más claro - do not touch this string variable, do not assign a different value to it.

1

Así es como el código final se verá como en los dos casos:

  • Usando const:

    public void InspectList(IList<int> values) 
    { 
        if(values != null) 
        { 
         foreach(int i in values) 
         { 
          Log(string.Format("Element At {0}", i)); 
         } 
        } 
    } 
    
  • Sin 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)); 
         } 
        } 
    } 
    

Así que en el segundo caso tendrá un adicional variable local declarada, pero en mi humilde opinión, la diferencia sería microscópica.

+2

Eso dependería del optimizador. Supongo que el compilador actual de MS C# arrojará un resultado similar al tuyo, pero no estoy seguro sobre cualquier diferencia en el código binario resultante después de que se haya compilado el código IL. –

1

Hay varias razones por las que declarar algo que es una constante como const. En primer lugar, le dice a cualquiera que lea el código que el valor permanecerá igual, que el udentificador es simplemente un alias para el valor. En segundo lugar, un optimizador tendría un trabajo más fácil para determinar si el valor de un identificador podría haber cambiado entre dos lecturas. Declararlo cuesta mucho porque no puede cambiar. Para mí, la razón anterior es la más importante. Escribir un código que muestre claramente la intención es para mí uno de los hábitos más importantes que un desarrollador podría tener.

Cuestiones relacionadas