Megosztás a következőn keresztül:


Tervezési szabályok

A tervezési szabályok támogatják a .NET-keretrendszer tervezési irányelveinekbetartását.

Ebben a szakaszban

Szabály Leírás
CA1000: Ne deklarálja a statikus tagokat az általános típusokon Amikor egy általános típus statikus tagját meghívják, a típus argumentumát meg kell adni a típushoz. Ha olyan általános példánytagot hív meg, amely nem támogatja a következtetést, a típusargumentumot meg kell adni a tag számára. Ebben a két esetben a típusargumentum megadásának szintaxisa eltérő és könnyen összekeverhető.
CA1001: Az eldobható mezőket tartalmazó típusoknak eldobhatónak kellene lenniük Az osztály deklarál és implementál egy System.IDisposable típusú példánymezőt, és az osztály nem implementálja az IDisposable-t. Az IDisposable mezőt közvetetten deklaráló osztály nem felügyelt erőforrással rendelkezik, és implementálnia kell az IDisposable interfészt.
CA1002: Ne tegye közzé az általános listákat A System.Collections.Generic.List<(A <(T>)>) egy általános gyűjtemény, amely teljesítményre, nem öröklésre lett tervezve. Ezért a Lista nem tartalmaz virtuális tagokat. Az öröklésre tervezett általános gyűjteményeket inkább közzé kell tenni.
CA1003: Általános eseménykezelő példányok használata A típus tartalmaz egy érvénytelenséget visszaadó delegáltat, akinek az aláírása két paramétert tartalmaz (az első egy objektumot, a másodikat pedig az EventArgshez rendelhető típust), valamint az azt tartalmazó szerelvény a .NET-keretrendszer 2.0-s céljait.
CA1005: Kerülje az általános típusok túlzott paramétereinek használatát Minél több típusparamétert tartalmaz egy általános típus, annál nehezebb tudni és megjegyezni, hogy az egyes típusparaméterek mit jelölnek. Általában nyilvánvaló egy típusparaméterrel, mint a Lista<T>esetében, és bizonyos esetekben két típusparaméterrel, mint a Szótár<TKey, TValue>esetében. Ha azonban kétnál több típusparaméter létezik, a nehézség túl nagy lesz a legtöbb felhasználó számára.
CA1008: Az enumerálásoknak nulla értékkel kell rendelkezniük A nem inicializált enumerálás alapértelmezett értéke, csakúgy, mint a többi értéktípus, nulla. A nem megadott enumerálásnak nullával kell meghatároznia egy tagot, hogy az alapértelmezett érték az enumerálás érvényes értéke legyen. Ha a FlagsAttribute attribútummal rendelkező enumerálás nulla értékű tagot határoz meg, a neve "Nincs", amely azt jelzi, hogy nincs érték beállítva az enumerálásban.
CA1010: A gyűjteményeknek meg kell valósítaniuk az általános interfészt A gyűjtemények használhatóságának bővítése érdekében implementálja az egyik általános gyűjteményi felületet. Ezután a gyűjtemény általános gyűjteménytípusok feltöltésére használható.
CA1012: Az absztrakt típusok nem lehetnek nyilvános konstruktorokkal Az absztrakt típusok konstruktorai csak származtatott típusok használatával hívhatók meg. Mivel a nyilvános konstruktorok egy típusú példányokat hoznak létre, és nem hozhatók létre absztrakt típusú példányok, a nyilvános konstruktort tartalmazó absztrakt típus helytelenül van kialakítva.
CA1014: Jelölje meg a szerelvényeket a CLSCompliantAttribute segítségével A Common Language Specification (CLS) olyan elnevezési korlátozásokat, adattípusokat és szabályokat határoz meg, amelyeknek a szerelvényeknek meg kell felelniük, ha a programozási nyelvek között használják őket. A jó kialakítás azt diktálja, hogy minden szerelvények kifejezetten jelezzék a CLS-megfelelőséget a CLSCompliantAttribute használatával. Ha ez az attribútum nem található meg egy szerelvényen, a szerelvény nem megfelelő.
CA1016: Szerelvények megjelölése a AssemblyVersionAttribute A .NET a verziószámmal egyedileg azonosít egy szerelvényt, és az erősen elnevezett szerelvények típusaihoz kapcsolódik. A verziószám a verzió- és a közzétevői szabályzattal együtt használatos. Alapértelmezés szerint az alkalmazások csak azzal a szerelvényverzióval futnak, amellyel létrehozták őket.
CA1017: Jelölje meg a szerelvényeket a ComVisibleAttribute-tal A ComVisibleAttribute határozza meg, hogy a COM-ügyfelek hogyan férnek hozzá a felügyelt kódhoz. A jó kialakítás azt diktálja, hogy a szerelvények explicit módon jelezzék a COM láthatóságát. A COM láthatósága beállítható a teljes egységhez, majd felül lehet bírálni az egyes típusok és típustagok esetében. Ha ez az attribútum nincs jelen, a szerelvény tartalma látható a COM-ügyfelek számára.
CA1018: Attribútumok megjelölése az AttributeUsageAttribute segítségével Ha egyéni attribútumot határoz meg, jelölje meg az AttributeUsageAttribute használatával annak jelzésére, hogy a forráskódban hol alkalmazható az egyéni attribútum. Az attribútum jelentése és rendeltetése határozza meg az attribútum érvényes helyét a kódban.
CA1019: Attribútumargumentumok kiegészítőinek definiálása Az attribútumok olyan kötelező argumentumokat határozhatnak meg, amelyeket meg kell adni, amikor az attribútumot egy célra alkalmazza. Ezeket pozíciós argumentumoknak is nevezik, mivel az attribútumkonstruktoroknak pozíciós paraméterekként vannak megadva. Minden kötelező argumentum esetében az attribútumnak egy megfelelő írásvédett tulajdonságot is meg kell adnia, hogy az argumentum értéke lekérhető legyen a végrehajtáskor. Az attribútumok opcionális argumentumokat is definiálhatnak, amelyeket nevesített argumentumoknak is neveznek. Ezeket az argumentumokat a rendszer név alapján adja meg az attribútumkonstruktoroknak, és ennek megfelelő olvasási/írási tulajdonságmal kell rendelkeznie.
CA1021: A kimeneti paraméterek elkerülése A típusok hivatkozással történő átadása (out vagy ref) használatához tapasztalatra van szükség a mutatókkal, az értéktípusok és a referenciatípusok különbségeinek megértéséhez, valamint a több visszatérési értékkel rendelkező metódusok kezeléséhez. Emellett a kimeneti és a referencia paraméterek közötti különbség nem széles körben ismert.
CA1024: Adott esetben tulajdonságok használata A nyilvános vagy védett metódusok neve "Get" néven kezdődik, nem vesz fel paramétereket, és olyan értéket ad vissza, amely nem tömb. A módszer jó jelölt lehet arra, hogy egy tulajdonsággá váljon.
CA1027: Felsorolt típusok megjelölése a FlagsAttribute-val Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. Akkor alkalmazza a FlagsAttribute-ot egy enumerációra, ha az elnevezett állandók értelmesen kombinálhatók.
CA1028: Az enum tárterületének Int32-nek kell lennie Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. Alapértelmezés szerint a System.Int32 adattípus az állandó érték tárolására szolgál. Annak ellenére, hogy módosíthatja ezt az alapul szolgáló típust, a legtöbb forgatókönyv esetében nem kötelező vagy ajánlott.
CA1030: Szükség esetén események használata Ez a szabály olyan metódusokat észlel, amelyek általában eseményekhez használt neveket használnak. Ha egy metódust egyértelműen meghatározott állapotváltozásra válaszul hív meg, a metódust egy eseménykezelőnek kell meghívnia. A metódust meghívó objektumoknak eseményeket kell emelnie a metódus közvetlen meghívása helyett.
CA1031: Ne kezelje az általános kivételtípusokat Általános kivételeket nem szabad lekezelni. Egy konkrétabb kivétel elfogása, vagy az általános kivétel újbóli létrehozása a fogási blokk utolsó utasításaként.
CA1032: Standard kivételkonstruktorok implementálása Ha nem adja meg a konstruktorok teljes készletét, az megnehezítheti a kivételek helyes kezelését.
CA1033: A felületi metódusokat a gyermektípusoknak kellene, hogy hívhatóak legyenek A külsőleg nem látható típus explicit módon implementál egy nyilvános felületet, és nem nyújt alternatív külsőleg látható metódust, amelynek neve megegyezik.
CA1034: A beágyazott típusok ne legyenek láthatók A beágyazott típus egy másik típus hatókörében deklarált típus. A beágyazott típusok hasznosnak bizonyulnak a benne található típus privát implementálási részleteinek beágyazásához. Az erre a célra használt beágyazott típusok nem lehetnek külsőleg láthatók.
CA1036: Hasonló típusok felülbírálási módszerei Egy nyilvános vagy védett típus implementálja a System.IComparable felületet. Nem bírálja felül az Object.Equals függvényt, és nem túlterheli a nyelvspecifikus operátort az egyenlőség, az egyenlőtlenség, a kisebb vagy nagyobb érték miatt.
CA1040: Kerülje a üres interfészeket Az interfészek olyan tagokat határoznak meg, amelyek viselkedési vagy használati szerződést biztosítanak. Az interfész által leírt funkciók bármilyen típussal alkalmazhatók, függetlenül attól, hogy a típus hol jelenik meg az öröklési hierarchiában. Egy típus implementál egy interfészt úgy, hogy implementációkat biztosít a felület tagjai számára. Az üres felület nem határoz meg tagokat; ezért nem határoz meg végrehajtható szerződést.
CA1041: ElavultAttribútum üzenet megadása Egy típus vagy tag egy System.ObsoleteAttribute attribútummal van megjelölve, amely nem rendelkezik megadva az ObsoleteAttribute.Message tulajdonsággal. Az ElavultAttribute használatával megjelölt típus vagy tag fordításakor megjelenik az attribútum Üzenet tulajdonsága, amely információt ad a felhasználónak az elavult típusról vagy tagról.
CA1043: Integrál vagy sztring argumentum használata indexelőkhöz Az indexelőknek (vagyis az indexelt tulajdonságoknak) integrál- vagy sztringtípusokat kell használniuk az indexhez. Ezeket a típusokat általában az adatstruktúrák indexelésére használják, és növelik a kódtár használhatóságát. Az objektumtípus használatát azokra az esetekre kell korlátozni, amikor az adott integrál- vagy sztringtípus nem határozható meg a tervezéskor.
CA1044: A tulajdonságok nem írhatók csak Bár elfogadható és gyakran szükséges írásvédett tulajdonsággal rendelkezni, a tervezési irányelvek tiltják a írásvédett tulajdonságok használatát. Ennek az az oka, hogy ha egy felhasználó beállít egy értéket, majd megakadályozza, hogy a felhasználó megtekintse ezt az értéket, nem biztosít semmilyen biztonságot. Olvasási hozzáférés nélkül a megosztott objektumok állapota nem tekinthető meg, ami korlátozza a hasznosságukat.
CA1045: Ne adjon át típusokat hivatkozással A típusok hivatkozással történő átadása (out vagy ref) használatához tapasztalatra van szükség a mutatókkal, az értéktípusok és a referenciatípusok különbségeinek megértéséhez, valamint a több visszatérési értékkel rendelkező metódusok kezeléséhez. Nem várhatják el a könyvtárépítészek, akik az általános közönség számára terveznek, hogy a felhasználók jártasak legyenek az out vagy ref paraméterekkel való munkában.
CA1046: Ne terhelje túl az egyenlőség operátort referenciatípusokra Referenciatípusok esetén az egyenlőségi operátor alapértelmezett megvalósítása szinte mindig helyes. Alapértelmezés szerint két hivatkozás csak akkor egyenlő, ha ugyanarra az objektumra mutatnak.
CA1047: Ne deklaráljon védett tagokat lezárt típusokban A típusok védett tagokat deklarálnak, hogy az öröklő típusok elérhessék vagy felülbírálhassák a tagot. Definíció szerint a lezárt típusok nem örökölhetők, ami azt jelenti, hogy a lezárt típusok védett módszerei nem hívhatók meg.
CA1050: Típusok deklarálása névterekben A típusok névterekben vannak deklarálva, hogy megelőzzék a névütközést, és így rendszerezhetők a kapcsolódó típusok egy objektumhierarchiában.
CA1051: Ne tegyen láthatóvá példánymezőket A mező elsődleges használatának implementálási részletként kell lennie. A mezőknek privátnak vagy belsőnek kell lenniük, és tulajdonságok használatával kell elérhetővé tenni őket.
CA1052: A statikus tartótípusokat le kell zárni A nyilvános vagy védett típus csak statikus tagokat tartalmaz, és nem deklarálható a lezárt (C#) vagy a NotInheritable (Visual Basic) módosítóval. A nem örökölni kívánt típust a lezárt módosítóval kell megjelölni annak alaptípusként való használatának megakadályozása érdekében.
CA1053: A statikus tartó típusok nem rendelkezhetnek konstruktorokkal A nyilvános vagy beágyazott nyilvános típus csak statikus tagokat deklarál, és nyilvános vagy védett alapértelmezett konstruktorsal rendelkezik. A konstruktor szükségtelen, mert a statikus tagok meghívása nem igényel ilyen típusú példányt. A sztring túlterhelésének az egységes erőforrás-azonosító (URI) túlterhelését kell meghívnia a sztring argumentum használatával a biztonság és védelem érdekében.
CA1054: Az URI-paraméterek nem lehetnek sztringek Ha egy metódus egy URI sztring-ábrázolását használja, megfelelő túlterhelést kell biztosítani, amely az URI-osztály egy példányát veszi igénybe, amely biztonságos és biztonságos módon biztosítja ezeket a szolgáltatásokat.
CA1055: Az URI visszatérési értékei nem lehetnek sztringek Ez a szabály feltételezi, hogy a metódus URI-t ad vissza. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. A System.Uri osztály biztonságos és védett módon biztosítja ezeket a szolgáltatásokat.
CA1056: Az URI-tulajdonságok ne legyenek karakterláncok Ez a szabály feltételezi, hogy a tulajdonság egy URI-t jelöl. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. A System.Uri osztály biztonságos és védett módon biztosítja ezeket a szolgáltatásokat.
CA1058: A típusok nem terjeszthetik ki bizonyos alaptípusokat A külsőleg látható típus kiterjeszt bizonyos alaptípusokat. Használja az egyik alternatívát.
CA1060: P/Invokes áthelyezése NativeMethods osztályba A platformhívási metódusok, például a System.Runtime.InteropServices.DllImportAttribute megjelölt vagy a Deklarálás kulcsszóval definiált metódusok a Visual Basicben, nem felügyelt kódhoz férhetnek hozzá. Ezek a metódusok a NativeMethods, a SafeNativeMethods vagy a UnsafeNativeMethods osztályba tartoznak.
CA1061: Ne rejtse el az alaposztály-metódusokat Az alaptípusban lévő metódusokat egy azonos nevű metódus rejti el egy származtatott típusban, ha a származtatott módszer paraméteraditványa csak olyan típusok szerint különbözik, amelyek gyengébben származnak, mint az alapmetódus paraméter-aláírásában szereplő megfelelő típusok.
CA1062: Nyilvános metódusok argumentumainak ellenőrzése A külsőleg látható metódusoknak átadott összes hivatkozási argumentumot null értékre kell ellenőrizni.
CA1063: Az IDisposable helyes implementálása Minden IDisposable típusnak helyesen kell megvalósítania a Dispose mintát.
CA1064: A kivételeknek nyilvánosnak kell lenniük A belső kivétel csak a saját belső hatókörén belül látható. Miután a kivétel kívül esik a belső hatókörön, csak az alapkivétel használható a kivétel elfogásához. Ha a belső kivétel System.Exception, System.SystemExceptionvagy System.ApplicationExceptionöröklődik, a külső kód nem rendelkezik elegendő információval ahhoz, hogy megtudja, mit kell tennie a kivétellel.
CA1065: Ne emeljen kivételeket váratlan helyeken Az a metódus, amely várhatóan nem ad kivételeket, kivételt eredményez.
CA1066: Az IEquatable implementálása az Equals metódus felüldefiniálásakor Az értéktípus a Equals metódust felülbírálja, de nem implementálja a IEquatable<T>-et.
CA1067: A felülbírálás egyenlő az IEquatable megvalósításakor Egy típus implementálja a IEquatable<T>-t, de nem írja felül a Equals metódust.
CA1068: A CancellationToken paramétereknek utolsónak kell lennie A metódus olyan CancellationToken paraméterrel rendelkezik, amely nem az utolsó paraméter.
CA1069: A számokat nem szabad duplikálni, Az enumerálásnak több tagja van, amelyek explicit módon ugyanazt az állandó értéket kapják.
CA1070: Ne deklarálja az eseménymezőket virtuálisnak A mezőhöz hasonló esemény virtuálisként lett deklarálva.