Najbliżej byłoby konstruktor z opcjonalnymi parametrami:
class Contact
{
public string Name { get; }
public string Address { get; }
public Contact(string name = null, string address = null) {
Name = name;
Address = address;
}
}
Następnie można wywołać go z nazw parametrów:
new Contact(
name: "John",
address: "23 Tennis RD"
)
Składnia jest nieco różni się od inicjowania obiektu, ale to tak samo czytelny; i IMO, różnica jest dobra, ponieważ parametry konstruktora sugerują niezmienne właściwości. I możesz określić parametry w dowolnej kolejności lub zostawić je poza domem, więc jest tak samo potężne, jak składnia inicjatora obiektu.
Wymaga to dodatkowego kodu (definiującego konstruktora, przypisującego wszystkie właściwości), więc jest to więcej pracy niż składnia inicjatora obiektu. Ale nie za straszne, a wartość niezmiennych obiektów jest tego warta.
(Na co warto, C# 7 może dostać immutable "record types" że mają znacznie prostszą składnię To może lub nie może uczynić go do ostatecznej wersji, ale brzmią całkiem fajne.).
ja potrzebuje ustawiające - nope to robi nie! Wymaga prawa do zapisu na polu lub propery. W przypadku nieruchomości rzeczywiście potrzebuje settera. W przypadku pola to po prostu nie może być statyczne ani tylko do odczytu. –
Prawidłowo. Powód dla którego powiedziałem: "następnie ustaw wartości właściwości, wymaga Settera". Nawet z publicznym ustawiaczem, jeśli pole zaplecza było tylko do odczytu, próba napisania do niego nie byłaby nawet kompilowana. –