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 oboru jiného typu, který se nazývá uzavřený 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 uzavřenými typy a jako takové nejsou vhodné pro obecné 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ě vystavený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ýčt předaný metodě definované ve třídě by neměl být definován jako vnořený typ ve třídě.
❌ NEPOUŽÍVEJTE vnořené typy, pokud je potřeba vytvořit instanci pomocí kódu klienta. 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ů takový konstruktor nepodporuje.
© Části 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.
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 v rámci Microsoft Windows Development Series.