Tervezési szabályok

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

A szakasz tartalma

Szabály Leírás
CA1000: Ne deklarálja a statikus tagokat általános típusok esetében 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 kell 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<(Of <(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 olyan delegáltat, amely érvénytelen értéket ad vissza, amelynek az aláírása két paramétert tartalmaz (az első egy objektumot, a másodikat pedig az EventArgshez rendelhető típust), és a szerelvényt tartalmazó célokat .NET-keretrendszer 2.0-s értékre.
CA1005: Az általános típusok túlzott paramétereinek elkerülése 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. Ez általában nyilvánvaló egy típusparaméter, mint a T> lista<, és bizonyos esetekben két típusparaméter, mint a Szótár<TKey, TValue>. 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ásnak nulla értékkel kell rendelkeznie 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 általános felületet kell implementálniuk 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 konstruktorok 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: Szerelvények megjelölése a CLSCompliantAttribute használatával 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 AssemblyVersionAttribute használatával 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: Szerelvények megjelölése a ComVisibleAttribute használatával 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 szerelvényhez, 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 használatával 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óargumentumoknak is nevezik, mivel az attribútumkonstruktorok helyparamé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 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 kimenő és az újraf paraméter 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 lehet egy jó jelölt, hogy váljon egy tulajdonság.
CA1027: Számjelek megjelölése FlagsAttribute használatával Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. A FlagsAttribute alkalmazása enumerálásra, ha az elnevezett állandók értelmesen kombinálhatók.
CA1028: Az enumerálási tárolónak 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 kapja meg az általános kivételtípusokat Általános kivételeket nem szabad kifogni. 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 gyermektípusok szerint kell meghívni 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 nem lehetnek 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: Az üres felületek elkerülése 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: ElavultAttribute ü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ás alapján 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. Az általános közönség számára tervező könyvtártervezők nem várhatják el, hogy a felhasználók jártasak legyenek a ki- vagy újraf paraméterekkel való munkában.
CA1046: Ne terhelje túl az operátort a referenciatípusoknál 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ípusok esetén 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: Látható példánymezők deklarálása 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ípusoknak nem szabad konstruktorokkal rendelkezniük 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 biztonsági és biztonsági sztring argumentum használatával.
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ágosan és biztonságosan biztosítja ezeket a szolgáltatásokat.
CA1056: Az URI-tulajdonságok nem lehetnek sztringek 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ágosan és biztonságosan 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 Deklarálás kulcsszóval a Visual Basicben meghatározott metódusokkal megjelöltek, nem felügyelt kódot érhetnek el. Ezeknek a metódusoknak a NativeMethods, Széf NativeMethods vagy UnsafeNativeMethods osztálynak kell lenniük.
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 implementálnia az Elidegenítési 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 a külső kódtól System.ExceptionSystem.SystemExceptionöröklődik, System.ApplicationExceptionakkor a külső kód nem rendelkezik elegendő információval ahhoz, hogy tudja, mit tegyen 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: IEquatable implementálása egyenlők felülírásakor Az értéktípus felülbírálja a metódust Equals , de nem implementálja IEquatable<T>.
CA1067: A felülbírálás egyenlő az IEquatable megvalósításakor Egy típus implementálja IEquatable<T>, de nem bírálja felül Equals a metódust.
CA1068: A CancellationToken paramétereknek az utolsónak kell lenniük 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álisként Egy mezőszerű esemény virtuálisként lett deklarálva.