Sdílet prostřednictvím


Upozornění návrhu

Upozornění návrhu dodržují Směrnice návrhu rozhraní .NET Framework.

V tomto oddíle

Pravidlo

Description

CA1000: Nedeklarujte statické členy v obecných typech

Při volání statického členu generického typu musí být pro tento typ zadán argument typu.Je-li zavolán generický člen instance, který nepodporuje odvozování, musí být pro tento člen zadán argument typu.V těchto dvou případech je syntaxe zadávání argumentu typu různá a snadno zaměnitelná.

CA1001: Typy, které vlastní uvolnitelné pole by měly být uvolnitelné

Třída deklaruje a implementuje pole instance typu System.IDisposable, přičemž neimplementuje rozhraní IDisposable.Třída, která deklaruje pole IDisposable nepřímo, vlastní nespravovaný zdroj a měla by rozhraní IDisposable implementovat.

CA1002: Nezveřejňujte obecné seznamy

Třída System.Collections.Generic.List<(Of <(T>)>) je obecná kolekce navržená pro výkon, nikoli dědičnost.Proto třída List neobsahuje žádné virtuální členy.Místo ní by měly být vystaveny kolekce navržené pro dědičnost.

CA1003: Použijte instance obecných obslužných rutin události

Typ obsahuje delegát vracející hodnotu void, jehož předpis obsahuje dva parametry (první je objekt a druhý typ přiřaditelný do typu EventArgs), přičemž je příslušné sestavení zacíleno na rozhraní .NET Framework 2,0.

CA1004: Obecné metody by měly poskytnout parametr typu

Argument typu generické metody je z argumentu typu předávaného metodě odvozen namísto explicitního určení argumentu typu.Má-li být odvozování povoleno, musí předpis parametrů generické metody zahrnovat parametr stejného typu jako parametr typu metody.V tomto případě nemusí být argument typu zadán.Používáte-li odvození pro všechny parametry typu, je syntaxe volání generických a negenerických metod instancí identická, což zjednodušuje použití generických metod.

CA1005: Vyhněte se nadbytečným parametrům na obecných typech

Čím více parametrů typu generický typ obsahuje, tím obtížnější je vědět a zapamatovat si, co každý z parametrů typu představuje.To je obvykle zřejmé v případě jednoho parametru typu, například u třídy List<T>, a v některých případech se dvěma parametry typu, například u třídy Dictionary<TKey, TValue>.Pokud však existují více než dva parametry typu, stává se pro většinu uživatelů použití příliš obtížným.

CA1006: Nevnořujte obecné typy v signaturách členu

Vnořený typ argumentu je typ argumentu, který je také generickým typem.Chce-li uživatel zavolat člen, jehož předpis obsahuje vnořený argument typu, musí nejprve vytvořit instanci jednoho generického typu a předat tento typ konstruktoru druhého generického typu.Potřebná procedura a syntaxe je složitá a je vhodné se jí vyhnout.

CA1007: Použijte obecné typy, kde je to vhodné

Externě viditelná metoda obsahuje referenční parametr typu System.Object.Použitím generických metod lze metodě předávat všechny typy (s určitými omezeními) bez předchozího přetypování typu na referenční typ parametru.

CA1008: Výčty by měly mít nulovou hodnotu

Výchozí hodnota neinicializovaného výčtu je stejně jako u jiných typů hodnot nula.Atributovaný výčet bez příznaků by měl definovat člen za použití hodnoty nula tak, aby výchozí hodnota byla platnou hodnotou výčtu.Definuje-li výčet, který má aplikován atribut FlagsAttribute, člen s hodnotou nula, měl by jeho název být "None", aby tak označoval, že ve výčtu nebyly nastaveny žádné hodnoty.

CA1009: Deklarujte správně obslužné rutiny událostí

Metody zpracování událostí přebírají dva parametry.První je typu System.Object a je pojmenován "sender".Je jím objekt, který vyvolal událost.Druhý parametr je typu System.EventArgs a je pojmenován "e".Představuje data přidružená k události.Metody zpracování událostí by neměly vracet hodnotu; v programovacím jazyce C# je toto označeno návratovým typem void.

CA1010: Kolekce musí implementovat obecné rozhraní

Použitelnost kolekce lze rozšířit implementací jednoho z rozhraní generické kolekce.Pak lze tuto kolekci použít k zaplnění typů generických kolekcí.

CA1011: Zvažte předání základních typů jako parametrů

Je-li v deklaraci metody zadán jako parametr základní typ, lze jako příslušný argument metodě předat kterýkoliv typ odvozený z tohoto základního typu.Pokud není dodatečná funkčnost poskytovaná odvozeným parametrem vyžadována, umožňuje použití základního typu širší využití metody.

CA1012: Abstraktní typy by neměly mít konstruktory

Konstruktory abstraktních typů mohou být volány pouze odvozenými typy.Jelikož veřejné konstruktory vytváření instance typu, přičemž nelze vytvořit instance abstraktního typu, je abstraktní typ obsahující veřejný konstruktor nesprávně navržen.

CA1013: Přetižte operátor rovnosti společně s přetížením operátorů sčítání a odečítání

Veřejný nebo chráněný typ implementuje operátory sčítání a odčítání, aniž by implementoval operátor rovnosti.

CA1014: Označte sestavení pomocí atributu CLSCompliantAttribute

Specifikace Common Language Specification (CLS) definuje omezení názvů, datové typy a pravidla, která musí sestavení dodržovat, pokud budou použita napříč programovacími jazyky.Dobrý návrh vyžaduje, aby všechna sestavení explicitně vyjadřovala dodržování specifikace CLS použitím atributu CLSCompliantAttribute.Není-li tento atribut v sestavení přítomen, nedodržuje sestavení specifikaci.

CA1016: Označte sestavení pomocí atributu AssemblyVersionAttribute

Rozhraní .NET Framework používá číslo verze pro jednoznačnou identifikaci sestavení a pro vazbu s typy v sestaveních se silným názvem.Číslo verze je používáno spolu se zásadou verze a vydavatele.Ve výchozím nastavení mohou být aplikace spuštěny pouze ve verzi sestavení, v níž byly sestaveny.

CA1017: Označte sestavení pomocí atributu ComVisibleAttribute

Atribut ComVisibleAttribute určuje způsob přístupu klientů COM ke spravovanému kódu.Dobrý návrh přikazuje, že sestavení explicitně uvedou viditelnost modelu COM.Viditelnost modelu COM může být nastavena pro celé sestavení a poté přepsána pro jednotlivé typy a členy typů.Není-li tento atribut přítomen, je obsah sestavení viditelný klientům COM.

CA1018: Označte atributy pomocí AttributeUsageAttribute

Při definování vlastního atributu jej označte použitím atributu AttributeUsageAttribute, čímž je určeno, kde ve zdrojovém kódu může být vlastní atribut použit.Význam a zamýšlené použití atributu určuje jeho platné umístění v kódu.

CA1019: Definujte přístupové vlastnosti pro argumenty atributu

Atributy mohou definovat povinné argumenty, které musejí být specifikovány při použití atributu na cíl.Říká se jim také poziční argumenty, jelikož jsou konstruktorům atributů předány jako poziční parametry.Pro každý povinný argument by měl atribut navíc poskytovat odpovídající vlastnost jen pro čtení, aby mohla být hodnota argumentu během spuštění získána.Atributy mohou také definovat volitelné argumenty, které jsou rovněž známy jako pojmenované argumenty.Tyto argumenty jsou podle názvu poskytovány konstruktorům atributů a měly by mít odpovídající vlastnost pro čtení i zápis.

CA1020: Vyvarujte se oborům názvu s malým množstvím typů

Ujistěte se, že všechny obory názvů mají logické uspořádání a že je vložení typů do řídce zaplněných oborů názvů odůvodněné.

CA1021: Vyhněte se výstupním parametrům

Předávání typů odkazem (za použití klíčových slov out nebo ref) vyžaduje zkušenosti s ukazateli, pochopení, jak se liší typy hodnot a typy odkazů a schopnost práce s metodami vracejícími více návratových typů.Také rozdíl mezi parametry out a ref není běžně chápán.

CA1023: Indexery by neměly být multidimenzionální

Indexery (tj. indexované vlastnosti) by měly používat jediný index.Vícerozměrné indexery mohou výrazně snížit použitelnost knihovny.

CA1024: Použijte vlastnosti, kde je to vhodné

Veřejná nebo chráněná metoda má název začínající na "Get", nepřijímá žádné parametry a vrací hodnotu, která není polem.Metoda může být dobrým kandidátem stát se vlastností.

CA1025: Nahraďte opakované argumenty polem parametrů

Není-li znám přesný počet argumentů a jsou-li proměnné argumenty stejného typu (nebo je lze předat jako stejný typ), použijte namísto opakovaných argumentů pole parametrů.

CA1026: Neměly by být použity výchozí parametry

Ve specifikaci CLS jsou povoleny metody používající výchozí parametry, avšak specifikace umožňuje kompilátorům ignorovat hodnoty přiřazené těmto parametrům.Chcete-li zachovat shodné chování napříč programovacími jazyky, měly by být metody používající výchozí parametry nahrazeny přetíženími metody, které výchozí parametry poskytují.

CA1027: Označte výčty pomocí FlagsAttribute

Výčet je typ hodnoty, který definuje množinu souvisejících pojmenovaných konstant.Mohou-li být pojmenované konstanty smysluplně kombinovány, použijte ve výčtu atribut FlagsAttribute.

CA1028: Úložiště výčtu by měl být Int32

Výčet je typ hodnoty, který definuje množinu souvisejících pojmenovaných konstant.Ve výchozím nastavení je pro uložení konstantní hodnoty použit datový typ System.Int32.Přestože lze tento typ změnit, není to ve většině případů zapotřebí ani doporučováno.

CA1030: Použijte události, kde je to vhodné

Toto pravidlo zjišťuje metody, které mají názvy obvykle používané pro události.Je-li metoda volána jako odpověď na jednoznačně definovanou změnu stavu, měla by být metoda volána obslužnou rutinou události.Objekty volající tuto metodu by měly místo přímého volání metody vyvolat událost.

CA1031: Nezachycujte výjimky obecného typu

Obecné výjimky by neměly být zachycovány.Zachyťte více specifickou výjimku nebo jako poslední příkaz bloku catch vyvolejte obecnou výjimku znovu.

CA1032: Implementujte standardní konstruktory výjimky

Není-li dodána úplná sada konstruktorů, může být obtížné správně zpracovávat výjimky.

CA1033: Metody rozhraní by měla být volatelné podřízenými typy

Nezapečetěný externě viditelný typ poskytuje explicitní implementaci metod veřejného rozhraní a neposkytuje alternativní externě viditelné metody stejného názvu.

CA1034: Vnořené typy by neměly být viditelné

Vnořený typ je typ deklarovaný v rámci jiného typu.Vnořené typy jsou užitečné pro zapouzdření soukromých podrobností implementace v daném typu.Jsou-li vnořené typy používány za tímto účelem, neměly by být externě viditelné.

CA1035: Implementace ICollection mají členy silného typu

Toto pravidlo vyžaduje, aby implementace rozhraní ICollection poskytovaly členy se silnými typy, aby uživatelé nemuseli při využívání funkčnosti poskytované rozhraním přetypovávat argumenty na typ Object.Toto pravidlo předpokládá, že typ implementuje rozhraní ICollection proto, aby mohl spravovat kolekci instancí typu silnějšího než Object.

CA1036: Přepište metody srovnatelných typů

Veřejný nebo chráněný typ implementuje rozhraní System.IComparable.Nepřepisuje metodu Object.Equals, ani nepřetěžuje operátory rovnosti, nerovnosti, menší než a větší než specifické pro daný jazyk.

CA1038: Enumerátory by měly být silného typu

Toto pravidlo vyžaduje, aby implementace rozhraní IEnumerator také poskytovat verze vlastnosti Current se silnými typy, aby uživatelé nemuseli při použití funkčnosti poskytované tímto rozhraním přetypovávat návratovou hodnotu na silný typ.

CA1039: Seznamy jsou silného typu

Toto pravidlo vyžaduje, aby implementace rozhraní IList poskytovaly členy se silnými typy, aby uživatelé nemuseli při využívání funkčnosti poskytované rozhraním přetypovávat argumenty na typ System.Object.

CA1040: Vyhněte se prázdným rozhraním

Rozhraní definují členy ujednávající jejich chování nebo užití.Funkčnost popsaná rozhraním může být osvojena libovolným typem bez ohledu na to, kde se typ vyskytuje v hierarchii dědičnosti.Typ implementuje rozhraní tím, že poskytuje implementace jeho členů.Prázdné rozhraní nedefinuje žádné členy, tudíž ani nedefinuje žádná implementovatelná ujednání.

CA1041: Poskytněte zprávu ObsoleteAttribute

Je označen typ nebo člen atributem System.ObsoleteAttribute, aniž by měl zadánu vlastnost ObsoleteAttribute.Message.Při kompilaci typu nebo členu označeného atributem ObsoleteAttribute, je zobrazena vlastnost atributu Message, která informuje uživatele o tomto zastaralém typu nebo členu.

CA1043: Použijte celočíselný nebo řetězcový argument pro indexery

Indexery (tj. indexované vlastnosti) by měly jako index používat celočíselné typy nebo typy řetězců.Tyto typy se obvykle používají pro indexování datových struktur a zvyšují použitelnost knihovny.Použití typu Object by mělo být omezeno na ty případy, kdy během návrhu není možné určit konkrétní celočíselný nebo řetězcový typ.

CA1044: Vlastnosti by neměly být pouze pro zápis

Ačkoli je přijatelné a často nezbytné použít vlastnosti pouze pro čtení, směrnice návrhu zakazují použití vlastností pouze pro zápis.Důvodem je skutečnost, že umožnit uživateli nastavit hodnotu a poté uživateli zabránit v zobrazení této hodnoty není bezpečné.Taktéž bez přístupu pro čtení není možné zobrazit stav sdílených objektů, což omezuje jejich užitečnost.

CA1045: Nepředávejte typy odkazem

Předávání typů odkazem (za použití klíčových slov out nebo ref) vyžaduje zkušenosti s ukazateli, pochopení, jak se liší typy hodnot a typy odkazů a schopnost práce s metodami vracejícími více návratových typů.Návrháři knihoven, kteří navrhují knihovny pro širokou veřejnost, by neměli očekávat schopnost uživatelů pracovat s parametry out či ref.

CA1046: Nepřetěžujte operátory rovnosti na odkazových typech

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 rovny pouze pokud ukazují na stejný objekt.

CA1047: Nedeklarujte chráněné členy v zapečetěných typech

Typy deklarují chráněné členy, aby k nim odvozené typy mohly přistupovat nebo je přepisovat.Dle definice nelze dědit zapečetěné typy, což znamená, že nelze volat chráněné metody zapečetěných typů.

CA1048: Nedeklarujte virtuální členy v zapečetěných typech

Typy deklarují metody jako virtuální, aby odvozující typy mohly přepsat implementaci virtuálních metod.Dle definice nelze zdědit zapečetěný typ.Díky tomu postrádají virtuální metody v zapečetěných typech význam.

CA1049: Typy, které vlastní nativní prostředky by měly být uvolnitelné

Typy, které přidělují nespravované prostředky, by měly implementovat rozhraní IDisposable a umožnit tak volajícím uvolnit tyto prostředky na požádání a zkrátit životní cyklus objektů, které je využívají.

CA1050: Deklarujte typy v oborech názvů

Typy jsou deklarovány v oborech názvů, aby bylo zabráněno kolizím názvů a zároveň jako způsob organizace souvisejících typů v hierarchii objektů.

CA1051: Nedeklarujte viditelná pole instance

Hlavní použití pole by mělo být jako podrobnost implementace.Pole by měla být soukromá nebo vnitřní a měla by být vystavena za použití vlastností.

CA1052: Statický vlastník typů by měl být zapečetěný

Veřejný nebo chráněný typ obsahuje pouze statické členy a není deklarovat za použití zapečetěného modifikátoru (jazyk C#) nebo modifikátoru NonInheritable (jazyk Visual Basic).Typu, u nějž není zamýšleno dědění, by mělo být zabráněno v použití jako základního typu označením zapečetěným modifikátorem.

CA1053: Statický vlastník typů by neměl 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 je nezbytný, protože volání statických členů nevyžaduje instanci typu.Z důvodu bezpečnosti a zabezpečení by řetězcová přetížení měla volat přetížení identifikátoru URI použitím argumentu řetězce.

CA1054: Parametry identifikátoru URI by neměly být řetězce

Pakliže metoda přijímá řetězcovou reprezentaci identifikátoru URI, mělo by být poskytnuto odpovídající přetížení přijímající instanci třídy URI, která tyto služby poskytuje bezpečným a zabezpečeným způsobem.

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 chybám analýzy a kódování a může vést k ohrožení bezpečnosti.Třída System.Uri poskytuje tyto služby bezpečným a zabezpečený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 chybám analýzy a kódování a může vést k ohrožení bezpečnosti.Třída System.Uri poskytuje tyto služby bezpečným a zabezpečeným způsobem.

CA1057: Řetězcové přetížení identifikátoru URI volá přetížení System.Uri

Typ deklaruje přetížení metod, které se liší pouze nahrazením řetězcového parametru parametrem typu System.Uri.Přetížení přijímající řetězcový parametr nevolá přetížení, které přijímá parametr identifikátoru URI.

CA1058: Typy by neměly rozšířit určité základní typy

Externě viditelný typ rozšiřuje určité základní typy.Použijte jednu z alternativ.

CA1059: Členové by neměli zveřejňovat určité konkrétní typy

Konkrétní typ je typ, který je zcela implementován a lze tudíž vytvořit jeho instanci.Chcete-li umožnit široké využití členu, nahraďte konkrétní typ použitím navrhovaného rozhraní.

CA1060: Přesuňte volání nespravovaných kódů do třídy NativeMethods

Metody vyvolání platformy, například metody označené atributem DllImportAttribute nebo metody definované pomocí klíčového slova Declare v jazyce Visual Basic, přistupují k nespravovanému kódu.Tyto metody by měly patřit třídě NativeMethods, SafeNativeMethods nebo UnsafeNativeMethods.

CA1061: Neskrývejte metody třídy base

Metoda základního typu je skryta identicky pojmenovanou metodou v odvozeném typu, kde je předpis parametrů odvozené metody odlišný od odpovídajících typů v předpisu parametrů základní metody pouze ve slaběji odvozených typech.

CA1062: Ověřte argumenty veřejných metod

Všechny argumenty odkazu předané externě viditelným metodám by měly být porovnány s hodnotou NULL.

CA1063: Implementuje správně IDisposable

Všechny typy IDisposable by měly správně implementovat vzor Dispose.

CA1064: Výjimky by měly být veřejné

Interní výjimka je viditelná pouze uvnitř svého vlastního vnitřního rozsahu.Jakmile výjimka přesáhne hranice vnitřního rozsahu, lze pro zachycení výjimky použít pouze základní výjimku.Je-li vnitřní výjimka odvozena ze třídy Exception, SystemException nebo ApplicationException, externí kód nebude mít dostatek informací pro její zpracování.

CA1065: Nevyvolávejte výjimky v neočekávaných umístěních

Metoda, u které není předpokládáno vyvolání výjimky, vyvolala výjimku.

CA2210: Sestavení by měly mít platné silné názvy

Silný název chrání klienty před neúmyslným načtením narušeného sestavení.Sestavení bez silných názvů by krom velmi omezených scénářů neměla být nasazována.Pokud sdílíte nebo šíříte sestavení, která nejsou správně podepsána, může být sestavení záměrně poškozeno, modul CLR jej nemusí načíst nebo uživatelé mohou být nuceni vypnout na svém počítači ověřování.