No. Controllare l'uscita IL (generata in LINQPad). In realtà non chiama affatto un costruttore. Invece, memorizza il valore intero 0 all'interno di una variabile locale chiamata f
. Questo è lo esatto stesso output che si ottiene quando si utilizza un cast di tipo sull'enumerazione.
Per quanto riguarda il compilatore, Fruits f = new Fruits();
corrisponde a Fruit f = (Fruit)0;
.
Fruits f = new Fruits()
IL
Program.Main:
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0 // f
IL_0003: ret
Program..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
Per confronto, ecco l'output IL di una classe normale. Guarda IL_001 in Program.Main dove chiama effettivamente un costruttore per la classe.
Program.Main:
IL_0000: nop
IL_0001: newobj UserQuery+Program+Fruits..ctor
IL_0006: stloc.0 // f
IL_0007: ret
Program..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
Fruits..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
fonte
2015-08-05 14:14:27
cosa ti piacerebbe realizzare con tale costruttore? –
Potrei voler sovrascrivere il comportamento predefinito di restituzione di Apple per impostazione predefinita, solo pensando ad alta voce. – yogi
È possibile modificare quale è l'impostazione predefinita cambiando l'ordine in cui sono elencate le alternative enum. –