La cosa più vicina sarebbe un costruttore con parametri opzionali:
class Contact
{
public string Name { get; }
public string Address { get; }
public Contact(string name = null, string address = null) {
Name = name;
Address = address;
}
}
Poi si può chiamare con i nomi dei parametri:
new Contact(
name: "John",
address: "23 Tennis RD"
)
La sintassi è leggermente diverso da un inizializzatore oggetto, ma è altrettanto leggibile; e IMO, la differenza è una buona cosa, perché i parametri del costruttore tendono a suggerire proprietà immutabili. E puoi specificare i parametri in qualsiasi ordine, o lasciarne alcuni, quindi è altrettanto potente della sintassi di inizializzatore di oggetti.
Ciò richiede un codice aggiuntivo (definizione del costruttore, assegnazione di tutte le proprietà), quindi è più utile della sintassi di inizializzazione dell'oggetto. Ma non troppo terribile, e vale la pena il valore di oggetti immutabili.
(per quello che vale, C# 7 può ottenere immutable "record types" che hanno sintassi molto più semplice Questi possono o non possono farne la versione finale, ma il suono piuttosto fresco..)
fonte
2016-05-08 21:51:50
I ha bisogno setter - no lo fa non! Richiede accesso in scrittura sul campo o proprietà. Nel caso di una proprietà ha effettivamente bisogno di un setter. Nel caso di un campo non può essere statico o solo in lettura. –
corretto. Motivo per cui ho detto: "quindi imposta i valori delle proprietà, richiede setter". Anche con un setter pubblico, se il backing field era in sola lettura, provare a scriverlo non sarebbe nemmeno stato compilato. –