Obsah:
Definice - Co znamená vnořený typ?
Vnořený typ v C # je typ deklarovaný v rámci existující třídy nebo struktury. Na rozdíl od nevnořeného typu, který je deklarován přímo v kompilační jednotce nebo jmenném prostoru, je vnořený typ definován v rámci rozsahu obsahujícího (nebo vnějšího) typu.
Vnořený typ se používá pouze v případě, že jeho rozsah, viditelnost a životnost končí v rámci obsaženého typu, aniž by se vystavil jiným typům. Člen enumerátoru v rámci typu kolekce je obvykle implementován jako vnořený typ pro iteraci nad kolekcí. Jako iterátor umožňuje enumerátor použití stejné logiky na straně klienta k iteraci kolekce, bez ohledu na základní strukturu kolekce dat.
Obecně se vnořený typ používá pouze v situacích, kdy logicky patří k typu obsahujícímu. Je implementováno, když typ obsahující je zcela závislý na vnořeném typu, který pomáhá zapouzdřit implementační podrobnosti o typu obsahujícím. Často se používá ve scénářích, kde se typ obsahující typ, který má pro implementaci vnořený typ, přímo používá bez požadavku na instanci jeho vnořeného typu.
Techopedia vysvětluje vnořený typ
K vnořenému typu lze přistupovat odkudkoli v rámci programu jeho prohlášením za veřejnou úroveň přístupnosti a pomocí jeho plně kvalifikovaného názvu.
Například AddressInformation může být vnořený typ deklarovaný v rámci typu Zaměstnanec a lze k němu přistupovat pomocí plně kvalifikovaného názvu Employee.AddressInformation.
Vnořený typ má následující klíčové vlastnosti:
- Může mít různé formy přístupnosti, které zahrnují soukromé, veřejné, chráněné, chráněné interní a interní. Ve výchozím nastavení má soukromou přístupnost.
- Může přistupovat k soukromým a chráněným členům obsahujícího typ, včetně všech zděděných soukromých a chráněných členů. Pro přístup k těmto členům musí být instance obsahující typ předána do vnořeného typu prostřednictvím svého konstruktoru.
- Umožňuje více úrovní vnoření, což umožňuje definovat kódový blok jedné vnořené třídy v jiné.
- Může zdědit od typu obsahujícího a může být také zděděn.
- Soukromí členové vnořeného typu nejsou pro typ obsahující neviditelní.
Vnořený typ by neměl být použit, pokud musí být veřejně vystaven pro instanci klientským kódem nebo pokud je na něj přímo odkazován v klientském kódu. Nelze jej použít namísto oboru názvů pro konstrukty logického seskupování.
