2011-03-21 18 views
6

Buena mañana, tarde o noche,constantes calculadas en C#

o bien el MSIL o el compilador JIT reemplazar cosas como 1 << 5 o 1 << 31 en el código con 32 y 2147483648, respectivamente, o van a esperar a la ejecución del método de evaluar esas constantes "justo a tiempo" ya que implican otros métodos (operadores)?

Muchas gracias.

+1

Depende del contexto, pero la mayoría de las veces se evaluarán en tiempo de compilación. – BoltClock

+0

estas son las constantes de tiempo del comule -> se evalúan a la hora de comil –

Respuesta

5

Sí. Mire el IL compilado para un programa que solo hace Console.WriteLine(1 << 5) y verá que es el mismo que para Console.WriteLine(32) o Console.WriteLine(0x20). Lo mismo se aplica a muchas otras constantes.

3

(probado) - Lo hacen en realidad redundan en el mismo valor calculado después de la compilación, la especificación C# confirma:

10.4 Constantes

Una constante es un miembro de la clase que representa un valor constante : un valor que puede ser calculado en tiempo de compilación. Una declaración de constante introduce una o más constantes de un tipo dado.

+0

Eso no significa que necesariamente se compila de esa manera. Si escribió un compilador de C# que hizo el cálculo en tiempo de ejecución aún estaría en la letra de esa especificación. –

6

Pruébalo.

El siguiente código

static void Main (string[] args) 
    { 
     Console.WriteLine (1 << 4); 
    } 

se compila a

IL_0000: nop 
    IL_0001: ldc.i4.s 16 
    IL_0003: call  void [mscorlib]System.Console::WriteLine(int32) 
    IL_0008: nop 
    IL_0009: ret 

Simplemente carga la constante 16 y la pasa al WriteLine.

+0

Las constantes son valores inmutables que se conocen en tiempo de compilación y no cambian durante la vida del programa http://msdn.microsoft.com/en-us/library/ms173119(v=VS.90).aspx – HadleyHope