Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ezt a tartalmat a Pearson Education, Inc. engedélyével nyomtatjuk újra a Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition című műből. Ezt a kiadást 2008-ban adták ki, és a könyvet azóta teljesen átdolgozták a harmadik kiadásban. Előfordulhat, hogy az oldalon található információk némelyike elavult.
Az enum egy speciális értéktípus. Kétféle enumerálás létezik: egyszerű számokat és jelzőszámokat.
Az egyszerű számsorok kis, zárt választási lehetőségeket jelölnek. Az egyszerű szám gyakori példája a színek halmaza.
A jelzőenumokat úgy tervezték, hogy támogassák a bitenkénti műveleteket az enum értékein. A jelzők számának gyakori példája a lehetőségek listája.
✔️ A DO függvény enumerálással írja be az értékhalmazokat képviselő paramétereket, tulajdonságokat és visszaadott értékeket.
✔️ Érdemes az enumot használni a statikus állandók helyett.
❌ NE használjon számokat nyílt készletekhez (például az operációs rendszer verziójához, barátainak neveihez stb.).
❌ NE adjon meg fenntartott enumerálási értékeket, amelyek jövőbeli használatra szolgálnak.
A meglévő enum típushoz bármikor hozzáadhat értékeket a későbbi szakaszban. Az értékek számbavételéről további információt az Értékek hozzáadása az enumeráláshoz című témakörben talál. A fenntartott értékek csak szennyezi a valós értékek készletét, és általában felhasználói hibákhoz vezetnek.
❌ KERÜLJE el, hogy csak egy értékkel nyilvánosan tegyen közzé enumokat.
A C API-k jövőbeni bővíthetőségének biztosításához gyakori eljárás a fenntartott paraméterek hozzáadása a metódusaláírásokhoz. Az ilyen fenntartott paraméterek egyetlen alapértelmezett értékkel rendelkező számként is kifejezhetők. Ezt nem szabad felügyelt API-kban elvégezni. A metódusok túlterhelése lehetővé teszi paraméterek hozzáadását a jövőbeli kiadásokban.
❌ NE adjon meg sentinel-értékeket az enumokban.
Bár néha hasznosak a keretrendszerfejlesztők számára, a sentinel-értékek zavaróak a keretrendszer felhasználói számára. Ezek a függvények az enum állapotának nyomon követésére szolgálnak, nem pedig az enumerálás által képviselt készlet értékeinek egyikére.
✔️ A DO egyszerű számokkal nulla értéket ad meg.
Fontolja meg a "Nincs" típusú érték meghívását. Ha egy ilyen érték nem felel meg az adott számnak, akkor az enum leggyakoribb alapértelmezett értékét nullával kell hozzárendelni.
✔️ VEGYE FIGYELEMBE, hogy Int32 (a legtöbb programozási nyelvben az alapértelmezett) használatát vegye az enum alapjául szolgáló típusnak, kivéve, ha az alábbiak bármelyike igaz:
Az enum egy bitmező alapú felsorolási típus, és több mint 32 bitmezővel rendelkezik, vagy várhatóan több lesz a jövőben.
Az alaptípusnak eltérőnek kell lennie, mint Int32, hogy könnyebben együtt lehessen működni a nem felügyelt kóddal, amely különböző méretű felsorolási típusokat vár.
Egy kisebb mögöttes típus jelentős helyet takarítana meg. Ha arra számít, hogy a szám elsősorban a vezérlési folyamat argumentumaként lesz használva, a méret nem sokat számít. A méretmegtakarítás jelentős lehet, ha:
Arra számít, hogy a szám mezőként lesz használva egy nagyon gyakran példányosított struktúrában vagy osztályban.
Elvárható, hogy a felhasználók nagy méretű tömböket vagy gyűjteményeket hozzanak létre az enum példányokból.
Az enum számos példányának szerializálására számít.
Memóriabeli használat esetén vegye figyelembe, hogy a felügyelt objektumok mindig DWORD
igazodnak egymáshoz, ezért egy példányban több enumerálásra vagy más kisebb struktúrára van szükség a kisebb számmal való összecsomagoláshoz, hogy különbséget tegyen, mivel a teljes példányméret mindig fel lesz kerekítve egy DWORD
példányra.
✔️ A zászló enumokat nevezzük el többes számú főnevekkel vagy kifejezésekkel, és az egyszerű enumokat egyes számú főnevekkel vagy kifejezésekkel.
❌ NE terjedje ki System.Enum közvetlenül.
System.Enum egy speciális típus, amelyet a CLR használ a felhasználó által definiált enumerálások létrehozásához. A legtöbb programozási nyelv olyan programozási elemet biztosít, amely hozzáférést biztosít ehhez a funkcióhoz. A C#-ban például a enum
kulcsszó az enumerálás definiálására szolgál.
Jelölő számainak tervezése
✔️ DO alkalmazza a System.FlagsAttribute jelölő számokat. Ezt az attribútumot ne alkalmazza egyszerű számokat.
✔️ HASZNÁLJON két hatványt a jelölő enumerálási értékeihez, hogy azok szabadon kombinálhatók legyenek a bitenkénti VAGY művelettel.
Fontolja meg, hogy speciális enumértékeket biztosítson a gyakran használt jelölőkombinációkhoz.
A Bitwise-műveletek egy speciális fogalom, és nem szükségesek az egyszerű feladatokhoz. ReadWrite egy ilyen különleges érték példája.
❌ NE hozzon létre olyan jelzőszámokat, amelyekben az értékek bizonyos kombinációi érvénytelenek.
❌ KERÜLJE a nulla értékű jelzők használatát, kivéve, ha az érték "az összes jelölő törlése" értéket jelöli, és a következő útmutatóban előírtak szerint megfelelően van elnevezve.
✔️ Nevezze el a flag enumok nulla értékét None
. Az enumerálási jelölők esetében az értéknek mindig azt kell jelentenie, hogy "az összes jelölő törlődik".
Érték hozzáadása az enumeráláshoz
Nagyon gyakori, hogy miután már kiadták, értékeket kell hozzáadnia egy enum típushoz. Lehetséges alkalmazáskompatibilitási probléma, ha az újonnan hozzáadott értéket egy meglévő API-ból adja vissza, mert előfordulhat, hogy a rosszul írt alkalmazások nem megfelelően kezelik az új értéket.
✔️ GONDOLJA meg az értékek hozzáadását az enumokhoz, a kis kompatibilitási kockázat ellenére.
Ha valós adatokkal rendelkezik az alkalmazás inkompatibilitásairól, amelyeket egy enum bővítése okoz, fontolja meg egy új API bevezetését, amely visszaadja az új és a régi értékeket, és tegye elavulttá a régi API-t, amelynek továbbra is csak a régi értékeket kell visszaadnia. Ez biztosítja, hogy a meglévő alkalmazások kompatibilisek maradjanak.
© Részletek 2005, 2009 Microsoft Corporation. Minden jog fenntartva.
Újranyomva a Pearson Education, Inc. engedélyével, Krzysztof Cwalina és Brad Abrams Framework Design Guidelines: Konvenciók, Idiomák és Minták az Újrafelhasználható .NET Könyvtárak Számára, 2. kiadás című könyvéből, közzétéve 2008. október 22-én, a Addison-Wesley Professional által, a Microsoft Windows Fejlesztési Sorozat részeként.