Utilizzando riflettore ottengo il seguente output:A cosa servono questi codici?
.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
}
per
private static Foo Method()
{
return (Foo)Resolve();
}
private static object Resolve(params object[] args)
{
return new Foo();
}
Che cosa significano le linee 11-14 fanno? Chiamo una funzione e ottengo un risultato (riga 7). Lascio il risultato al giusto returntype (riga c) - perché non tornare in questo momento?
In qualche modo, il risultato del cast viene memorizzato come variabile locale - quindi c'è un salto non significativo alla riga successiva, dove la variabile locale viene caricata di nuovo. Perché?
Secondo la mia opinione la riga 11-14 e la variabile locale può essere omessa ...?
FYI, il mio articolo sul blog salirà l'11. –
Grazie per le informazioni ... Avrò un'occhiata – tanascius
Ecco il link: http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do .aspx –