L'ordine di valutazione del costruttore deve anche essere preso in considerazione quando si concatenano i costruttori:
Per prendere in prestito dalla risposta di Gishu, un po '(per mantenere il codice in qualche modo simile):
public Test(bool a, int b, string c)
: this(a, b)
{
this.C = c;
}
private Test(bool a, int b)
{
this.A = a;
this.B = b;
}
Se cambiamo l'evalution eseguita nel costruttore private
, un po', vedremo perché costruttore ordinamento è importante:
private Test(bool a, int b)
{
// ... remember that this is called by the public constructor
// with `this(...`
if (hasValue(this.C))
{
// ...
}
this.A = a;
this.B = b;
}
Sopra, ho aggiunto una chiamata di funzione fasulla che determina se la proprietà C
ha un valore. A prima vista, potrebbe sembrare che C
abbia un valore - è impostato nel costruttore chiamante; tuttavia, è importante ricordare che i costruttori sono funzioni.
this(a, b)
viene chiamato - e deve "restituire" - prima che venga eseguito il corpo del costruttore public
. Detto in modo diverso, l'ultimo costruttore chiamato è il primo costruttore valutato. In questo caso, private
viene valutato prima dello public
(solo per utilizzare la visibilità come identificatore).
Questo è stato abbastanza facile .. grazie! –