Próbuję odkodować fragment kodu z książki:
List<Person> people = new List<Person>()
{
new Person {FirstName="Homer",LastName="Simpson",Age=47},
new Person {FirstName="Marge",LastName="Simpson",Age=45}
};
Osoba jest tylko prostą klasą, którą stworzyli, z wieloma polami: Imię, Nazwisko itp.
Nie rozumiem, czy nie wysyłamy parametrów do konstruktora Person w nawiasach klamrowych? Próbowałem replikować ten kod, ale wydaje się, że nie lata, jacyś chętni?
Dzięki za wkład.
Odpowiedzi:
C # pozwala określić parametry właściwości w nawiasach klamrowych podczas inicjalizacji obiektu. Pozwala to wybrać i wybrać, które elementy należy zainicjować, a które pozostawić jako domyślne.
Konstruktor natomiast uruchamia jeden blok kodu ze stałym zestawem parametrów. Aby uzyskać ten sam efekt, musisz utworzyć wiele konstruktorów, wszystkie z różnymi kombinacjami właściwości, które możesz chcieć zainicjować, co może być uciążliwe.
jest dokładnie równoważne z tym:
Tyle że jest krótszy i prawdopodobnie łatwiejszy dla oczu.
Pozwala również na konstrukcje takie jak zademonstrowane w pytaniu, co byłoby bardzo uciążliwe, gdybyś musiał utworzyć zmienne tymczasowe i zainicjować je, tak jak ja tutaj, przed dodaniem ich do listy. (Tak właśnie to robiłeś). Wszystko to bez wymagania wyraźnie zdefiniowanego konstruktora, który pobiera pożądaną listę parametrów, które mogą być niedostępne.
Zauważ też, że chociaż konstruktor może inicjować właściwości za pomocą prywatnego setera, ta technika (jak powinno być oczywiste z podanego przykładu) będzie działać tylko wtedy, gdy masz publiczny seter dla tej właściwości. Zauważ też, że mój skrócony przykład domyślnie nazywał domyślnego (bez parametrów) konstruktora, który musiałby zatem być obecny.
źródło
new Person(lastName: "Simpson")
, pomijając parametryfirstName
iage
.var x = new Person("Homer", "Simpson", 47);