La documentazione MSDN illustra la particolare implementazione che il compilatore Microsoft C# utilizza per struct
. Questi dettagli particolari non sono nella specifica ECMA 334 C#; non fanno parte della semantica di struct
s. Pertanto, tali dettagli nella documentazione sono dettagli di implementazione.
Mi sembra di ricordare di aver letto da qualche parte Eric Lippert che dice che desidera (o preferisce, non ricordo quale livello di preferenza ha fornito) la documentazione non ha fatto menzione dello stack in relazione a struct
s. Vedrò se riesco a scavare.
Qui è, dal post sul blog che si è collegato a:
mi rammarico che la documentazione non si concentra su ciò che è più rilevante; concentrandosi su un dettaglio di implementazione in gran parte irrilevante, si amplia l'importanza di tale dettaglio di implementazione e si oscura l'importanza di ciò che rende semanticamente utile un tipo di valore. Desidero vivamente che tutti quegli articoli che spiegano cosa sia "lo stack" passerebbero invece del tempo a spiegare cosa si intenda esattamente "copiato in base al valore" e in che modo l'incomprensione o l'abuso di "copia per valore" possono causare errori.
La sezione pertinente della specifica ECMA 334 C# è §11. Nota che la parola "stack" non è mai usata in questa sezione. La sezione descrive semplicemente la sintassi, quella semantica dei valori segui struct
, che sono implicitamente sigillati ed ereditati da , che l'assegnazione a una variabile di tipo struct
crea una copia, che il passaggio di un valore struct
come valore crea una copia, come struct
s sono impostati su valori di default (tutti i campi di tipo valore del struct
sono impostati ai valori di default, e tutti i campi di tipo di riferimento sono impostati per null
), le regole di boxe e unboxing del struct
, il significato di this
per struct
s circostanti e come inizializzazione del campo, costruttori, distruttori e costruttori statici funzionano per struct
s. Di nuovo, nessuna menzione di pile. Mai.
Lo stack è un dettaglio di implementazione, non parte della semantica di struct
.
relativo alla domanda: http://stackoverflow.com/questions/1970894/struct-what-is-it-for/1970902#1970902 –
L'ho appena segnalato come duplicato qualche tempo fa :) – RCIX