Sdílet prostřednictvím


Pravidla návrhu

Pravidla návrhu podporují dodržování pokynů pro návrh rozhraní .NET Framework .

V této části

Pravidlo Popis
CA1000: Nedefinujte statické členy u generických typů Je-li volán statický člen generického typu, je nutné zadat argument typu. Když je volán obecný člen instance, který nepodporuje odvozování, musí být pro člena zadán argument typu. V těchto dvou případech je syntaxe pro zadání argumentu typu odlišná a snadno zmatená.
CA1001: Typy, které vlastní uvolnitelná pole, by měly být uvolnitelné Třída deklaruje a implementuje pole instance, které je typem System.IDisposable a třída neimplementuje IDisposable. Třída, která deklaruje pole IDisposable nepřímo vlastní nespravovaný prostředek a má implementovat rozhraní IDisposable.
CA1002: Nezpřístupňujte obecné seznamy System.Collections.Generic.List<(of <(T>)>) je obecná kolekce, která je navržená pro výkon, nikoli dědičnost. Seznam proto neobsahuje žádné virtuální členy. Místo toho by měly být zpřístupněny obecné kolekce navržené pro dědičnost.
CA1003: Použití generických instancí obslužných rutin událostí Typ obsahuje delegáta, který vrací void, jehož podpis obsahuje dva parametry (prvním je objekt a druhým typ, který lze přiřadit k EventArgs), a obsahující sestavení cílí na .NET Framework 2.0.
CA1005: Vyhněte se nadměrným parametrům u obecných typů Čím více parametrů typu obecný typ obsahuje, tím obtížnější je vědět a pamatovat si, co každý parametr typu představuje. Obvykle je to zřejmé s jedním parametrem typu, jako v List<T>, a v některých případech se dvěma parametry typu, jako ve slovníku<TKey, TValue>. Pokud však existuje více než dva parametry typu, stává se obtíž příliš velká pro většinu uživatelů.
CA1008: Enumy by měly mít výchozí hodnotu nula Výchozí hodnota neinicializovaného výčtu, stejně jako jiné typy hodnot, je nula. Výčet bez příznaků by měl definovat člena pomocí hodnoty nula, aby výchozí hodnota byla platnou hodnotou výčtu. Pokud výčet s použitým atributem FlagsAttribute definuje člen s nulovou hodnotou, jeho název by měl být "None" označující, že v výčtu nebyly nastaveny žádné hodnoty.
CA1010: Kolekce by měly implementovat obecné rozhraní Pokud chcete rozšířit použitelnost kolekce, implementujte jedno z obecných rozhraní kolekce. Pak lze kolekci použít k naplnění obecných typů kolekcí.
CA1012: Abstraktní typy by neměly mít veřejné konstruktory Konstruktory abstraktních typů lze volat pouze odvozenými typy. Protože veřejné konstruktory vytvářejí instance typu a nelze vytvořit instance abstraktního typu, abstraktní typ, který má veřejný konstruktor je nesprávně navržen.
CA1014: Označte sestavení pomocí CLSCompliantAttribute Specifikace CLS (Common Language Specification) definuje omezení pojmenování, datové typy a pravidla, kterým musí sestavení vyhovovat, pokud se budou používat v programovacích jazycích. Dobrý návrh určuje, že všechna sestavení explicitně označují shodu s CLS pomocí atributu CLSCompliantAttribute. Pokud tento atribut není k dispozici v sestavení, sestavení nedodržuje předpisy.
CA1016: Označte sestavení pomocí AssemblyVersionAttribute .NET používá číslo verze k jednoznačné identifikaci sestavení a k vytvoření vazby na typy v sestaveních se silným názvem. Číslo verze se používá společně se zásadami verze a vydavatele. Ve výchozím nastavení běží aplikace pouze s verzí sestavení, se kterou byly vytvořeny.
CA1017: Označte sestavení pomocí ComVisibleAttribute ComVisibleAttribute určuje, jak klienti MODELU COM přistupují ke spravovanému kódu. Dobrý návrh určuje, že sestavení explicitně označují viditelnost modelu COM. Viditelnost modelu COM lze nastavit pro celé sestavení a následně přepsat pro jednotlivé typy a členy typu. Pokud tento atribut není přítomen, obsah sestavení je viditelný pro klienty COM.
CA1018: Označte atributy pomocí atributu AttributeUsageAttribute Když definujete vlastní atribut, označte ho pomocí AttributeUsageAttribute k označení, kde se ve zdrojovém kódu dá použít vlastní atribut. Význam a zamýšlené použití atributu určí jeho platná umístění v kódu.
CA1019: Definujte přístupové objekty pro argumenty atributů Atributy mohou definovat povinné argumenty, které musí být zadány při použití atributu na cíl. Označují se také jako poziční argumenty, protože jsou dodávány konstruktorům atributů jako poziční parametry. Pro každý povinný argument by měl atribut také poskytnout odpovídající vlastnost jen pro čtení, aby hodnota argumentu mohla být načtena v době provádění. Atributy mohou také definovat volitelné argumenty, které se také označují jako pojmenované argumenty. Tyto argumenty se zadají konstruktorům atributů podle názvu a měly by mít odpovídající vlastnost pro čtení a zápis.
CA1021: Vyhněte se parametrům Předávání typů odkazem (použití out nebo ref) vyžaduje zkušenosti s ukazateli, pochopení, jak se typy hodnot a odkazové typy liší, a zpracování metod s více návratovými hodnotami. Rozdíl mezi parametry out a ref také není široce srozumitelný.
CA1024: Použijte vlastnosti tam, kde je to vhodné Veřejná nebo chráněná metoda má název, který začíná na "Get", nepřijímá žádné parametry a vrací hodnotu, která není pole. Metoda může být dobrým kandidátem na to, aby se stala vlastností.
CA1027: Označte výčty atributem FlagsAttribute Výčet je typ hodnoty, který definuje sadu souvisejících pojmenovaných konstant. Použití FlagsAttribute u výčtu, pokud je možné jeho pojmenované konstanty smysluplně zkombinovat.
CA1028: Úložiště výčtu by mělo být Int32 Výčet je typ hodnoty, který definuje sadu souvisejících pojmenovaných konstant. Ve výchozím nastavení se datový typ System.Int32 používá k uložení konstantní hodnoty. I když tento základní typ můžete změnit, pro většinu scénářů se nevyžaduje ani nedoporučuje.
CA1030: Použijte události tam, kde je to vhodné, Toto pravidlo detekuje metody, které mají názvy, které by se obvykle používaly pro události. Pokud je volána metoda v reakci na jasně definovanou změnu stavu, metoda by měla být vyvolána obslužnou rutinou události. Objekty, které volají metodu, by měly vyvolat události namísto přímého volání metody.
CA1031: Nezachycujte obecné typy výjimek Obecné výjimky by neměly být zachyceny. Zachyťte konkrétnější výjimku nebo znovu vyhoďte obecnou výjimku jako poslední příkaz v bloku catch.
CA1032: Implementace standardních konstruktorů výjimek Nedodání úplné sady konstruktorů může ztížit správné zpracování výjimek.
CA1033: Metody rozhraní by měly být volatelné podřízenými typy Nezapečetěný externě viditelný typ poskytuje explicitní implementaci metody veřejného rozhraní a neposkytuje alternativní externě viditelnou metodu se stejným názvem.
CA1034: Vnořené typy by neměly být viditelné Vnořený typ je typ, který je deklarován v rozsahu jiného typu. Vnořené typy jsou užitečné pro zapouzdření podrobností soukromé implementace typu, který je obsahuje. Pro tento účel by neměly být vnořené typy externě viditelné.
CA1036: Přepsání metod u srovnatelných typů Veřejný nebo chráněný typ implementuje rozhraní System.IComparable. Nepřepíše metodu Object.Equals ani nepřetěžuje operátor specifický pro daný jazyk pro rovnost, nerovnost, menší či větší.
CA1040: Vyhněte se prázdným rozhraním Rozhraní definují členy, které poskytují chování nebo kontrakt využití. Funkce popsané rozhraním lze přijmout libovolným typem bez ohledu na to, kde se typ vyskytuje v hierarchii dědičnosti. Typ implementuje rozhraní tím, že poskytuje implementace pro členy rozhraní. Prázdné rozhraní nedefinuje žádné členy; proto nedefinuje kontrakt, který lze implementovat.
CA1041: Poskytněte zprávu pro ObsoleteAttribute Typ nebo člen je označen atributem System.ObsoleteAttribute, který nemá zadanou vlastnost ObsoleteAttribute.Message. Pokud je zkompilován typ nebo člen označený pomocí ObsoleteAttribute, zobrazí se vlastnost Message atributu, která uživateli poskytuje informace o zastaralém typu nebo členu.
CA1043: Pro indexery použijte celočíselný nebo řetězcový argument Indexery (tj. indexované vlastnosti) by měly pro index používat celočíselné typy nebo typy řetězců. Tyto typy se obvykle používají k indexování datových struktur a zvyšují použitelnost knihovny. Použití typu Objekt by mělo být omezeno na případy, kdy nelze v době návrhu zadat konkrétní integrální typ nebo typ řetězce.
CA1044: Vlastnosti by neměly být zapisovat pouze I když je přijatelné a často nutné mít vlastnost jen pro čtení, pokyny pro návrh zakazují použití vlastností jen pro zápis. Důvodem je, že když uživatel nastaví hodnotu a pak mu je zabráněno tuto hodnotu zobrazit, nepřináší to žádnou bezpečnostní výhodu. Stav sdílených objektů navíc nelze zobrazit bez přístupu pro čtení, což omezuje jejich užitečnost.
CA1045: Nepředávejte typy odkazem Předávání typů odkazem (použití out nebo ref) vyžaduje zkušenosti s ukazateli, pochopení, jak se typy hodnot a odkazové typy liší, a zpracování metod s více návratovými hodnotami. Architekti knihoven, kteří navrhují pro širokou cílovou skupinu, by neměli očekávat, že uživatelé budou moct pracovat s parametry out nebo ref.
CA1046: Nepřetěžujte operátor rovnosti pro referenční typy U referenčních typů je výchozí implementace operátoru rovnosti téměř vždy správná. Ve výchozím nastavení jsou dva odkazy stejné pouze v případě, že odkazují na stejný objekt.
CA1047: Nedefinujte chráněné členy v uzavřených typech Typy deklarují chráněné členy, aby odvozené typy mohly k tomuto členu přistupovat nebo jej přepsat. Podle definice nelze uzavřené typy dědit, což znamená, že chráněné metody u uzavřených typů nelze volat.
CA1050: Deklarujte typy v jmenných prostorech Typy jsou deklarovány v oborech názvů, aby se zabránilo kolizím názvů a jako způsob uspořádání souvisejících typů v hierarchii objektů.
CA1051: Nedeklarujte viditelná pole instance Primární použití pole by mělo být jako podrobnosti implementace. Pole by měla být soukromá nebo vnitřní a mají být zpřístupněna prostřednictvím vlastností.
CA1052: Statické typy držáků by měly být zapečetěné Veřejný nebo chráněný typ obsahuje pouze statické členy a není deklarován pomocí zapečetěného modifikátoru (C#) nebo NotInheritable (Visual Basic). Typ, který nemá být zděděn, by měl být označen pomocí zapečetěného modifikátoru, aby se zabránilo jeho použití jako základního typu.
CA1053: Statické typy objektů-nosičů by neměly mít konstruktory Veřejný nebo vnořený veřejný typ deklaruje pouze statické členy a má veřejný nebo chráněný výchozí konstruktor. Konstruktor není nutný, protože volání statických členů nevyžaduje instanci typu. Přetížení řetězce by mělo volat přetížení identifikátoru URI (Uniform Resource Identifier) pomocí argumentu řetězce pro bezpečnost a zabezpečení.
CA1054: Parametry identifikátoru URI by neměly být řetězce Pokud metoda přebírá řetězcovou reprezentaci identifikátoru URI, měla by být zadána odpovídající přetížená metoda, která přebírá instanci třídy URI, která poskytuje tyto služby bezpečně a jistě.
CA1055: Návratové hodnoty identifikátoru URI by neměly být řetězce Toto pravidlo předpokládá, že metoda vrací identifikátor URI. Řetězcová reprezentace identifikátoru URI je náchylná k analýze a kódování chyb a může vést k ohrožením zabezpečení. Třída System.Uri poskytuje tyto služby bezpečným a bezpečným způsobem.
CA1056: Vlastnosti identifikátoru URI by neměly být řetězce Toto pravidlo předpokládá, že vlastnost představuje identifikátor URI. Řetězcová reprezentace identifikátoru URI je náchylná k analýze a kódování chyb a může vést k ohrožením zabezpečení. Třída System.Uri poskytuje tyto služby bezpečným a bezpečným způsobem.
CA1058: Typy by neměly rozšiřovat určité základní typy Externě viditelný typ rozšiřuje určité základní typy. Použijte jednu z alternativ.
CA1060: Přesuňte P/Invokes do třídy NativeMethods Metody volání platformy, jako jsou metody označené System.Runtime.InteropServices.DllImportAttribute nebo metody definované pomocí klíčového slova Declare v jazyce Visual Basic, mají přístup k nespravovanému kódu. Tyto metody by měly být NativeMethods, SafeNativeMethods nebo UnsafeNativeMethods třídy.
CA1061: Neskryjte metody základní třídy Metoda v základním typu je skrytá identickou metodou v odvozeném typu, pokud se podpis parametru odvozené metody liší pouze podle typů, které jsou slaběji odvozeny než odpovídající typy v podpisu parametru základní metody.
CA1062: Ověřte argumenty veřejných metod Všechny referenční argumenty předané externě viditelným metodám by měly být kontrolovány proti hodnotě null.
CA1063: Správně implementujte IDisposable Všechny typy IDisposable by měly implementovat vzor Dispose správně.
CA1064: Výjimky by měly být veřejné Vnitřní výjimka je viditelná pouze uvnitř svého interního oboru. Poté, co výjimka spadá mimo interní obor, lze k zachycení výjimky použít pouze základní výjimku. Pokud je vnitřní výjimka zděděna z System.Exception, System.SystemExceptionnebo System.ApplicationException, externí kód nebude mít dostatek informací, aby věděl, co dělat s výjimkou.
CA1065: Nevyvolávejte výjimky v neočekávaných místech Metoda, která neočekává vyvolání výjimek vyvolá výjimku.
CA1066: Implementujte IEquatable při překrytí Equals Typ hodnoty přepíše Equals metodu, ale neimplementuje IEquatable<T>.
CA1067: Při implementaci IEquatable přepsat metodu Equals Typ implementuje IEquatable<T>, ale nepřepíše Equals metodu.
CA1068: Parametry typu CancellationToken musejí být na konci Metoda má parametr CancellationToken, který není posledním parametrem.
CA1069: Výčty by neměly mít duplicitní hodnoty Výčet obsahuje více členů, kterým je explicitně přiřazena stejná konstantní hodnota.
CA1070: Nedeklarujte pole událostí jako virtuální Událost připomínající pole byla deklarována jako virtuální.