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 DWORDzarovnané, 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ů Nonepří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.

Viz také