Delen via


Geneste typen

Notitie

Deze inhoud wordt opnieuw afgedrukt door toestemming van Pearson Education, Inc. van Framework Design Guidelines: Conventions, Idioms en Patterns for Reusable .NET Libraries, 2nd Edition. Die editie werd in 2008 gepubliceerd en het boek is sindsdien volledig herzien in de derde editie. Sommige informatie op deze pagina is mogelijk verouderd.

Een genest type is een type dat is gedefinieerd binnen het bereik van een ander type, dat het omsluittype wordt genoemd. Een genest type heeft toegang tot alle leden van het bijbehorende insluitingstype. Het heeft bijvoorbeeld toegang tot privévelden die zijn gedefinieerd in het insluitingstype en tot beveiligde velden die zijn gedefinieerd in alle oplopende waarden van het insluittype.

In het algemeen moeten geneste typen spaarzaam worden gebruikt. Er zijn verschillende redenen hiervoor. Sommige ontwikkelaars zijn niet volledig bekend met het concept. Deze ontwikkelaars kunnen bijvoorbeeld problemen hebben met de syntaxis van het declareren van variabelen van geneste typen. Geneste typen zijn ook zeer nauw gekoppeld aan hun insluittypen en zijn daarom niet geschikt voor algemeen gebruik.

Geneste typen zijn het meest geschikt voor het modelleren van implementatiedetails van hun ingesloten typen. De eindgebruiker moet zelden variabelen van een genest type declareren en moet bijna nooit expliciet geneste typen instantiëren. De enumerator van een verzameling kan bijvoorbeeld een genest type van die verzameling zijn. Enumerators worden meestal geïnstantieerd door hun insluittype en omdat veel talen de foreach-instructie ondersteunen, moeten enumerator-variabelen zelden door de eindgebruiker worden gedeclareerd.

✔️ Gebruik geneste typen wanneer de relatie tussen het geneste type en het buitenste type zodanig is dat semantiek voor lidtoegankelijkheid wenselijk is.

❌ GEBRUIK GEEN openbare geneste typen als logische groeperingsconstructie; gebruik hiervoor naamruimten.

❌ VERMIJD openbaar blootgestelde geneste typen. De enige uitzondering hierop is als variabelen van het geneste type alleen moeten worden gedeclareerd in zeldzame scenario's, zoals subklassen of andere geavanceerde aanpassingsscenario's.

❌ Gebruik geen geneste typen als naar het type wordt verwezen buiten het type.

Een opsomming die is doorgegeven aan een methode die is gedefinieerd in een klasse, mag bijvoorbeeld niet worden gedefinieerd als een genest type in de klasse.

❌ Gebruik geen geneste typen als ze moeten worden geïnstantieerd door clientcode. Als een type een openbare constructor heeft, moet het waarschijnlijk niet worden genest.

Als een type kan worden geïnstantieerd, lijkt dat erop te wijzen dat het type een eigen plaats in het framework heeft (u kunt het maken, ermee werken en vernietigen zonder ooit het buitenste type te gebruiken), en dus niet moet worden genest. Binnenste typen mogen niet veel worden hergebruikt buiten het buitenste type zonder enige relatie met het buitenste type.

❌ DEFINIEER GEEN genest type als lid van een interface. Veel talen bieden geen ondersteuning voor een dergelijke constructie.

© Delen 2005, 2009 Microsoft Corporation. Alle rechten voorbehouden.

Herdrukt door toestemming van Pearson Education, Inc. van 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 als onderdeel van de Microsoft Windows Development Series.

Zie ook