Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Deze inhoud wordt opnieuw afgedrukt met toestemming van Pearson Education, Inc. uit Framework Design Guidelines: Conventies, idioom en patronen voor herbruikbare .NET-bibliotheken, 2e editie. 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.
Enumeratietypes zijn een speciaal soort waardetype. Er zijn twee soorten opsommingen: eenvoudige opsommingen en opsommingen van vlaggen.
Eenvoudige enumeraties vertegenwoordigen kleine gesloten collecties van keuzes. Een veelvoorkomend voorbeeld van de eenvoudige opsomming is een set kleuren.
Vlag-enums zijn ontworpen ter ondersteuning van bitwise bewerkingen op de enumwaarden. Een veelvoorkomend voorbeeld van een flags-enum is een optielijst.
✔️ GEBRUIK een enum om parameters, eigenschappen en retourwaarden sterk getypeerd te maken die waardenreeksen vertegenwoordigen.
Geef de voorkeur aan het gebruik van een enum in plaats van statische constanten.
❌ GEBRUIK GEEN opsomming voor open sets (zoals de versie van het besturingssysteem, namen van uw vrienden, enzovoort).
❌ GEEF GEEN gereserveerde enumwaarden op die zijn bedoeld voor toekomstig gebruik.
U kunt in een later stadium altijd gewoon waarden toevoegen aan de bestaande enum. Zie Waarden toevoegen aan Enums voor meer informatie over het toevoegen van waarden aan opsommingen. Gereserveerde waarden vervuilen alleen de set echte waarden en leiden meestal tot gebruikersfouten.
❌ VERMIJD het openbaar weergeven van opsommingen met slechts één waarde.
Een veelvoorkomende procedure voor het waarborgen van toekomstige uitbreidbaarheid van C-API's is het toevoegen van gereserveerde parameters aan methodehandtekeningen. Dergelijke gereserveerde parameters kunnen worden uitgedrukt als opsommingen met één standaardwaarde. Dit mag niet worden gedaan in beheerde API's. Bij overbelasting van methoden kunnen parameters worden toegevoegd in toekomstige releases.
❌ Neem geen sentinel-waarden op in opsommingen.
Hoewel ze soms nuttig zijn voor frameworkontwikkelaars, zijn sentinel-waarden verwarrend voor gebruikers van het framework. Ze worden gebruikt om de status van de enum bij te houden in plaats van een van de waarden uit de set te zijn die door de enum worden vertegenwoordigd.
✔️ DO geeft een waarde van nul op eenvoudige opsommingen.
Overweeg de waarde aan te roepen als 'Geen'. Als een dergelijke waarde niet geschikt is voor deze specifieke enum, moet de meest voorkomende standaardwaarde voor het enum worden toegewezen aan de onderliggende waarde van nul.
✔️ OVERWEEG om Int32 te gebruiken (de standaard in de meeste programmeertalen) als het onderliggende type van een enum, tenzij een van de volgende voorwaarden waar is:
De enum is een opsomming van vlaggen en u hebt meer dan 32 vlaggen of verwacht meer in de toekomst.
Het onderliggende type moet anders zijn dan Int32 voor een eenvoudigere interoperabiliteit met onbeheerde code die verschillende opsommingen verwacht.
Een kleiner onderliggend type zou leiden tot aanzienlijke besparingen in ruimte. Als u verwacht dat de opsomming voornamelijk wordt gebruikt als argument voor de controlestroom, maakt de grootte weinig verschil. De groottebesparingen kunnen aanzienlijk zijn als:
U verwacht dat de opsomming als veld gebruikt wordt in een structuur of klasse die zeer vaak wordt geïnstantieerd.
U verwacht dat gebruikers grote matrices of verzamelingen van de enum-exemplaren maken.
U verwacht dat een groot aantal exemplaren van de enum wordt geserialiseerd.
Voor gebruik in het geheugen moet u er rekening mee houden dat beheerde objecten altijd DWORD
zijn uitgelijnd, zodat u effectief meerdere opsommingen of andere kleine structuren in een instantie nodig hebt om een kleinere opsomming in te voegen, zodat dit een verschil maakt, aangezien de totale omvang van de instantie altijd naar boven wordt afgerond op een DWORD
.
✔️ Geef vlagopsommingen namen met meervoudige zelfstandige naamwoorden of zelfstandige naamwoordzinnen en eenvoudige enums met enkelvoudige zelfstandige naamwoorden of zelfstandige naamwoordzinnen.
❌ Breid System.Enum NIET rechtstreeks uit.
System.Enum is een speciaal type dat door de CLR wordt gebruikt om door de gebruiker gedefinieerde opsommingen te maken. De meeste programmeertalen bieden een programmeerelement waarmee u toegang hebt tot deze functionaliteit. In C# wordt bijvoorbeeld het enum
trefwoord gebruikt om een opsomming te definiëren.
"Flag-enums ontwerpen"
✔️ Pas de System.FlagsAttribute toe op flag-enums. Pas dit kenmerk niet toe op eenvoudige opsommingen.
✔️ GEBRUIK machten van twee voor de enumwaarden voor vlaggen zodat ze vrij gecombineerd kunnen worden met behulp van de bitsgewijze OR-bewerking.
✔️ OVERWEEG speciale enumwaarden op te geven voor veelgebruikte combinaties van vlaggen.
Bitwise-bewerkingen zijn een geavanceerd concept en moeten niet vereist zijn voor eenvoudige taken. ReadWrite is een voorbeeld van een dergelijke speciale waarde.
❌ VERMIJD het maken van vlag-opsommingen waarbij bepaalde combinaties van waarden ongeldig zijn.
❌ VERMIJD het gebruik van vlag-enumwaarden van nul, tenzij de waarde 'alle vlaggen worden gewist' en op de juiste manier wordt genoemd, zoals voorgeschreven door de volgende richtlijn.
✔️ Geef de nulwaarde van None
vlaggen-enums een naam. Voor een vlag-opsomming moet de waarde altijd betekenen dat alle vlaggen worden gewist.
Waarde toevoegen aan Enums
Het is heel gebruikelijk om te ontdekken dat u waarden moet toevoegen aan een enum nadat u deze al hebt verzonden. Er is een mogelijk probleem met de toepassingscompatibiliteit wanneer de nieuwe toegevoegde waarde wordt geretourneerd vanuit een bestaande API, omdat slecht geschreven toepassingen de nieuwe waarde mogelijk niet correct verwerken.
✔️ OVERWEEG waarden toe te voegen aan opsommingen, ondanks een klein compatibiliteitsrisico.
Als u echte gegevens hebt over incompatibiliteit van toepassingen die worden veroorzaakt door toevoegingen aan een enum, kunt u overwegen een nieuwe API toe te voegen die de nieuwe en oude waarden retourneert en de oude API afschadigt, die alleen de oude waarden zou moeten retourneren. Dit zorgt ervoor dat uw bestaande toepassingen compatibel blijven.
© Gedeelten 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, gepubliceerd 22 oktober 2008 door Addison-Wesley Professional als onderdeel van de Microsoft Windows Development Series.