Usando reflector me sale el siguiente resultado:¿Para qué son estos códigos de operación?
.method private hidebysig static class myModelTestarea.Foo Method() cil managed
{
.maxstack 1
.locals init ([0] class myModelTestarea.Foo CS$1$0000)
L_0000: nop
L_0001: ldc.i4.0
L_0002: newarr object
L_0007: call object myModelTestarea.Program::Resolve(object[])
L_000c: castclass myModelTestarea.Foo
L_0011: stloc.0
L_0012: br.s L_0014
L_0014: ldloc.0
L_0015: ret
}
para
private static Foo Method()
{
return (Foo)Resolve();
}
private static object Resolve(params object[] args)
{
return new Foo();
}
¿Qué significan las líneas 11-14 hacen? Llamo a una función y obtengo un resultado (línea 7). Eché el resultado al tipo de devolución correcto (línea c). ¿Por qué no regresar ahora mismo?
De alguna manera, el resultado arrojado se almacena como una variable local, luego hay un salto no-colateral a la siguiente línea, donde la variable local se carga nuevamente. ¿Por qué?
En mi opinión, la línea 11-14 y la variable local se pueden omitir ...?
FYI, el artículo de mi blog sobre esto subirá el día 11. –
Gracias por la información ... Voy a echar un vistazo – tanascius
Aquí está el enlace: http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do .aspx –