Zagnieżdżone typy

Uwaga

Ta zawartość jest drukowana przez uprawnienie Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Wydanie to zostało opublikowane w 2008 roku, a książka została w pełni zmieniona w trzecim wydaniu. Niektóre informacje na tej stronie mogą być nieaktualne.

Typ zagnieżdżony jest typem zdefiniowanym w zakresie innego typu, który jest nazywany typem otaczającym. Typ zagnieżdżony ma dostęp do wszystkich elementów członkowskich jego otaczającego typu. Na przykład ma dostęp do pól prywatnych zdefiniowanych w typie otaczającym i do pól chronionych zdefiniowanych we wszystkich rosnąco typie otaczającym.

Ogólnie rzecz biorąc, zagnieżdżone typy powinny być używane oszczędnie. Istnieje kilka powodów tego problemu. Niektórzy deweloperzy nie są w pełni zaznajomieni z koncepcją. Ci deweloperzy mogą na przykład mieć problemy ze składnią deklarowania zmiennych typów zagnieżdżonych. Typy zagnieżdżone są również bardzo ściśle powiązane z ich otaczającymi typami, a w związku z tym nie są odpowiednie do typów ogólnego przeznaczenia.

Typy zagnieżdżone najlepiej nadają się do modelowania szczegółów implementacji ich otaczających typów. Użytkownik końcowy powinien rzadko deklarować zmienne typu zagnieżdżonego i prawie nigdy nie powinien jawnie utworzyć wystąpienia typów zagnieżdżonych. Na przykład moduł wyliczający kolekcji może być zagnieżdżonym typem tej kolekcji. Moduły wyliczające są zwykle tworzone przez ich typ otaczający, a ponieważ wiele języków obsługuje instrukcję foreach, zmienne wyliczające rzadko muszą być deklarowane przez użytkownika końcowego.

✔️ Należy używać typów zagnieżdżonych, gdy relacja między typem zagnieżdżonym i jego typem zewnętrznym jest taka, że semantyka ułatwień dostępu składowego jest pożądana.

❌ NIE UŻYWAJ publicznych typów zagnieżdżonych jako konstrukcji grupowania logicznego; w tym celu należy używać przestrzeni nazw.

❌ UNIKAJ publicznie uwidocznionych typów zagnieżdżonych. Jedynym wyjątkiem jest to, że zmienne typu zagnieżdżonego muszą być zadeklarowane tylko w rzadkich scenariuszach, takich jak podklasy lub inne zaawansowane scenariusze dostosowywania.

❌ Nie używaj typów zagnieżdżonych, jeśli typ prawdopodobnie będzie przywoływane poza typem zawierającym.

Na przykład wyliczenie przekazane do metody zdefiniowanej w klasie nie powinno być zdefiniowane jako typ zagnieżdżony w klasie.

❌ Nie używaj typów zagnieżdżonych, jeśli muszą być tworzone przez kod klienta. Jeśli typ ma konstruktor publiczny, prawdopodobnie nie powinien być zagnieżdżony.

Jeśli można utworzyć wystąpienie typu, oznacza to, że typ ma własne miejsce w strukturze (można go utworzyć, pracować z nim i zniszczyć bez użycia typu zewnętrznego), a tym samym nie należy go zagnieżdżać. Typy wewnętrzne nie powinny być szeroko używane poza typem zewnętrznym bez żadnej relacji z typem zewnętrznym.

❌ NIE należy definiować typu zagnieżdżonego jako elementu członkowskiego interfejsu. Wiele języków nie obsługuje takiej konstrukcji.

© Części 2005, 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published oct 22, 2008 by Addison-Wesley Professional w ramach Microsoft Windows Development Series.

Zobacz też