Ho appena trovato un codice strano per me nel libro di Jeffrey Richter (CLR tramite C# 4.0, pagina 257) e ho frainteso il motivo per cui funziona così.get e set fraintendimento nell'inizializzazione: Jeffrey Richter, CLR via C#
public sealed class Classroom
{
private List<String> m_students = new List<String>();
public List<String> Students { get { return m_students; } }
public Classroom() { }
}
class Program
{
static void Main(string[] args)
{
Classroom classroom = new Classroom {
Students = { "Jeff", "Kristin" }
};
foreach (var student in classroom.Students)
Console.WriteLine(student);
}
}
Risultato:
Jeff
Kristin
Come potete vedere, abbiamo una proprietà di accesso di nome 'studenti', che ha solo getter (! Non Palleggiatrice), ma in funzione 'principale', quando vorremmo inizializzare variabile 'classe', abbiamo l'inizializzazione campo di tipo 'aula' 'studenti:
Classroom classroom = new Classroom {
Students = { "Jeff", "Kristin" }
};
ho sempre pensato che quando una variabile in 'sul lato sinistro' di espressione (int i = 1), quindi il compilatore dovrebbe accedere alla funzione setter e quando in 'right-side' (int x = i + 2) alla funzione getter.
Perché nel codice di Jeffrey il comportamento è così interessante (potrebbe essere solo per me? Scusa se è così).
Dov'è il badge per la risposta rapida che migliora le modifiche? – Michael
Vale la pena notare che 'Studenti = nuova lista()' darebbe un errore in fase di compilazione in quanto uno, a prima vista, potrebbe inizialmente prevedere in questo altro caso? –
Questa conoscenza ha soddisfatto la mia quota "Edifying C# fact of the day". – Chris