Návrh výčtu
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é.
Výčty jsou speciálním druhem typu hodnoty. Existují dva druhy výčtů: jednoduché výčty a výčty příznaků.
Jednoduché výčty představují malé uzavřené sady voleb. Běžným příkladem jednoduchého výčtu je sada barev.
Výčty příznaků jsou navržené tak, aby podporovaly bitové operace s hodnotami výčtu. Běžným příkladem výčtu příznaků je seznam možností.
✔️ Do use an enum to strongly type parameters, properties, and return values that represent sets of values.
✔️ Upřednostnění použití výčtu místo statických konstant.
❌ NEPOUŽÍVEJTE výčt pro otevřené sady (například verzi operačního systému, názvy přátel atd.).
❌ DO NOT neposkytuje rezervované výčtové hodnoty, které jsou určeny pro budoucí použití.
Vždy můžete jednoduše přidat hodnoty do existujícího výčtu v pozdější fázi. Další podrobnosti o přidávání hodnot do výčtů najdete v tématu Přidání hodnot do výčtů . Rezervované hodnoty pouze znečišťují sadu skutečných hodnot a mají tendenci vést k chybám uživatelů.
❌ Vyhněte se veřejnému zveřejnění výčtů pouze s jednou hodnotou.
Běžným postupem pro zajištění budoucí rozšiřitelnosti rozhraní API pro C je přidání vyhrazených parametrů do podpisů metod. Takové rezervované parametry lze vyjádřit jako výčty s jednou výchozí hodnotou. To by se nemělo provádět ve spravovaných rozhraních API. Přetížení metody umožňuje přidávání parametrů v budoucích verzích.
❌ DO VÝčtů nezahrnujte hodnoty sentinelu.
I když jsou někdy užitečné pro vývojáře architektury, hodnoty sentinelu jsou pro uživatele architektury matoucí. Používají se ke sledování stavu výčtu, nikoli k jedné z hodnot ze sady reprezentované výčtem.
✔️ DO zadejte hodnotu nula na jednoduchých výčtech.
Zvažte volání hodnoty jako Žádná. Pokud taková hodnota není vhodná pro tento konkrétní výčt, měla by být k podkladové hodnotě nula přiřazena nejběžnější výchozí hodnota výčtu.
✔️ ZVAŽTE použití Int32 (výchozí ve většině programovacích jazyků) jako základního typu výčtu, pokud není splněna některá z následujících možností:
Výčet je výčtem příznaků a máte více než 32 příznaků nebo očekáváte, že v budoucnu budete mít více.
Základní typ se musí lišit od Int32 jednodušší interoperability s nespravovaným kódem, který očekává výčty různých velikostí.
Menší základní typ by vedlo k podstatným úsporám v prostoru. Pokud očekáváte, že se výčt použije hlavně jako argument pro tok řízení, velikost má malý rozdíl. Úspory velikosti můžou být významné v následujících případech:
Očekáváte, že se výčt použije jako pole ve velmi často používané struktuře nebo třídě.
Očekáváte, že uživatelé budou vytvářet velká pole nebo kolekce instancí výčtu.
Očekáváte, že bude serializován velký počet instancí výčtu.
U využití v paměti mějte na paměti, že spravované objekty jsou vždy DWORD
zarovnané, takže potřebujete v instanci více výčtů nebo jiných malých struktur, abyste mohli zabalit menší výčt s cílem provést rozdíl, protože celková velikost instance bude vždy zaokrouhlena nahoru na .DWORD
✔️ Do name flag enums with plural nouns or noun phrases and simple enums with singular nouns or noun phrases.
❌ NEPRODLUŽUJTE System.Enum přímo.
System.Enum je speciální typ používaný CLR k vytvoření uživatelsky definovaných výčtů. Většina programovacích jazyků poskytuje programovací prvek, který poskytuje přístup k této funkci. Například v jazyce C# enum
se klíčové slovo používá k definování výčtu.
Návrh výčtů příznaků
✔️ Do apply the System.FlagsAttribute flag enums. Nepoužívejte tento atribut na jednoduché výčty.
✔️ Pro hodnoty výčtu příznaku používejte mocniny dvou, aby je bylo možné volně kombinovat pomocí bitové operace OR.
✔️ ZVAŽTE poskytnutí speciálních výčtových hodnot pro běžně používané kombinace příznaků.
Bitové operace jsou pokročilým konceptem a neměly by se vyžadovat pro jednoduché úlohy. ReadWrite je příkladem takové zvláštní hodnoty.
❌ Vyhněte se vytváření výčtů příznaků, ve kterých jsou některé kombinace hodnot neplatné.
❌ Nepoužívejte hodnoty výčtu příznaku nula, pokud hodnota nepředstavuje "všechny příznaky jsou vymazány" a je pojmenována odpovídajícím způsobem, jak je uvedeno v dalším návodu.
✔️ DO pojmenujte nulovou hodnotu výčtů None
příznaků . U výčtu příznaku musí hodnota vždy znamenat " všechny příznaky jsou vymazány".
Přidání hodnoty do výčtů
Je velmi běžné zjistit, že potřebujete přidat hodnoty do výčtu po jeho odeslání. Při vrácení nově přidané hodnoty z existujícího rozhraní API může dojít k problému s kompatibilitou aplikací, protože špatně napsané aplikace nemusí novou hodnotu zpracovat správně.
✔️ ZVAŽTE přidání hodnot do výčtů, navzdory malému riziku kompatibility.
Pokud máte skutečná data o nekompatibilitě aplikací způsobených přidáním výčtu, zvažte přidání nového rozhraní API, které vrací nové a staré hodnoty, a zastarání starého rozhraní API, které by mělo pokračovat v vrácení pouze starých hodnot. Tím zajistíte, že vaše stávající aplikace zůstanou kompatibilní.
© Čá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.