Alcune basi di valore di default in C#:
Quando viene creata un'istanza di una classe (o una struct), tutti i campi vengono inizializzati al rispettivo valore predefinito.
Per i tipi di riferimento, sarà null
. Per i tipi di valore, sarà equivalente a 0
. Questo è facilmente spiegabile in quanto la gestione della memoria assicura che la nuova memoria allocata sia inizializzata a 0x0 byte.
Le proprietà automatiche nascondono il campo generato, ma ce n'è uno. Quindi valgono le stesse regole.
Ora per rispondere alla tua domanda, il modo migliore per assicurarsi che i valori sono inizializzati è quello di fare un costruttore con un parametro per ogni campo/proprietà e per nascondere il costruttore di default senza parametri:
public Yourtype(String param1, Int32 param2)
{
this.Variable1 = param1;
this.Variable2 = param2;
}
private Yourtype() { }
Altre alternative sono descritte nelle risposte @Sean e @Alex se solo un sottoinsieme di proprietà/campi deve essere inizializzato/controllato. Ma questo nasconde un overhead (uno bool
per ogni proprietà/campo e qualche riferimento indiretto).
Penso che la meta-risposta sia "quindi non farlo". Assicurarsi che tutte le variabili siano inizializzate nel costruttore. – Martijn
Cosa succede se ho due funzioni. F1 e F2, ognuno utilizza entrambe le variabili. Ma per F1 devo essere sicuro che il chiamante della funzione abbia impostato valori per le variabili, anche se sono nulle.Per la F2 non mi interessa, non voglio costringerlo a mandare qualcosa nel costruttore! –
se per F1 hai bisogno del * chiamante * per impostare le variabili, perché non le passi come argomenti in F1? – Martijn