Sdílet prostřednictvím


Vnořené typy

Poznámka:

Tento obsah je znovu vytištěn oprávněním Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms a Patterns for Reusable .NET Libraries, 2. vydání. Tato edice byla publikována v roce 2008 a kniha byla od té doby plně upravena ve třetím vydání. Některé informace na této stránce můžou být zastaralé.

Vnořený typ je typ definovaný v rámci jiného typu, který se nazývá obklopující typ. Vnořený typ má přístup ke všem členům jeho uzavřeného typu. Má například přístup k soukromým polím definovaným v uzavřeném typu a k chráněným polím definovaným ve všech vzestupných nástavcích ohraničujícího typu.

Obecně platí, že vnořené typy by se měly používat střídmě. Existuje několik důvodů. Někteří vývojáři nejsou plně obeznámeni s konceptem. Tito vývojáři můžou mít například problémy se syntaxí deklarování proměnných vnořených typů. Vnořené typy jsou také velmi úzce svázány s jejich obklopujícími typy a jako takové nejsou vhodné pro univerzální typy.

Vnořené typy jsou nejvhodnější pro modelování podrobností implementace jejich uzavřených typů. Koncový uživatel by měl zřídka deklarovat proměnné vnořeného typu a téměř nikdy by neměl explicitně vytvořit instanci vnořených typů. Enumerátor kolekce může být například vnořeným typem této kolekce. Enumerátory se obvykle vytvářejí pomocí jejich nadřazeného typu a protože mnoho jazyků podporuje příkaz foreach, proměnné enumerátoru nemusí být deklarovány koncovým uživatelem.

✔️ Pokud je vztah mezi vnořeným typem a vnějším typem takový, aby byla sémantika přístupnosti členů žádoucí, použijte vnořené typy.

❌ NEPOUŽÍVEJTE veřejné vnořené typy jako konstruktor logického seskupení; k tomu použijte obory názvů.

❌ VYHNĚTE se veřejně dostupným vnořeným typům. Jedinou výjimkou je, že proměnné vnořeného typu je potřeba deklarovat pouze ve výjimečných scénářích, jako je podtřídy nebo jiné pokročilé scénáře přizpůsobení.

❌ NEPOUŽÍVEJTE vnořené typy, pokud je pravděpodobné, že se na typ odkazuje mimo typ obsahující.

Například výčet předaný metodě definované ve třídě by neměl být definován jako vnořený typ této třídy.

❌ NEPOUŽÍVEJTE vnořené typy, pokud je potřeba instanciovat klientským kódem. Pokud má typ veřejný konstruktor, pravděpodobně by neměl být vnořený.

Pokud lze vytvořit instanci typu, zdá se, že typ má místo ve vlastním rozhraní (můžete ho vytvořit, pracovat s ním a zničit jej bez použití vnějšího typu), a proto by neměl být vnořený. Vnitřní typy by neměly být široce opakovaně používány mimo vnější typ bez jakéhokoli vztahu k vnějšímu typu.

❌ NEdefinujte vnořený typ jako člen rozhraní. Mnoho jazyků takovou konstrukci nepodporuje.

Části z © 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.

Přetištěno se svolením Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition od Krzysztofa Cwaliny a Brada Abramse, vydáno 22. října 2008 nakladatelstvím Addison-Wesley Professional jako součást série Microsoft Windows Development.

Viz také