Základní návrh pravidel obecné pravidlo pro spravovaný kód
Pro zjednodušení pochopení a použití kódu je možné použít sadu pravidel Základní pravidla obecných zásad návrhu společnosti Microsoft.Je vhodné tuto sadu pravidel použít pokud projekt obsahuje kód knihovny nebo pokud je potřeba zajistit doporučené postupy pro jednodušší udržovatelnost kódu.
Základní pravidla obecných zásad návrhu obsahují všechna pravidla v sadě pravidel Minimální doporučená pravidla společnosti Microsoft.Seznam minimálních pravidel je uveden v Spravované doporučená pravidla sadu pravidel pro spravovaný kód.
Následující tabulka popisuje všechna pravidla v sadě pravidel Základní pravidla obecných zásad návrhu společnosti Microsoft.
Pravidlo |
Description |
---|---|
Typy, které vlastní uvolnitelná pole, by měly být uvolnitelné |
|
Deklarujte správně ovladače událostí |
|
Označte sestavení pomocí AssemblyVersionAttribute |
|
Metody rozhraní by měly být volatelné podřízenými typy |
|
Typy, které vlastní nativní prostředky, by měly být uvolnitelné |
|
Přesuňte volání nespravovaných kódů do třídy NativeMethods |
|
Neskrývejte metody základní třídy |
|
Implementuje správně IDisposable |
|
Nevyvolávejte výjimky v neočekávaných umístěních |
|
Vyhněte se duplicitním akcelerátorům |
|
Vstupní body volání nespravovaného kódu by měly existovat |
|
Volání nespravovaných kódů by neměla být viditelná |
|
Typy automatického rozložení by neměly být viditelné modelu COM |
|
Volejte GetLastError ihned po volání nespravovaného kódu |
|
Základní typy viditelného typu modelu COM by měly být viditelné modelu COM |
|
Metody registrace modelu COM by si měly odpovídat |
|
Deklarujte správně volání nespravovaných kódů |
|
Odstraňte prázdné finalizační metody |
|
Pole hodnotového typu by měla být přenosná |
|
Deklarace volání nespravovaného kódu by měla být přenosná |
|
Nepoužívejte zámky na objekty se slabou identitou |
|
Zkontrolujte dotazy SQL pro chyby zabezpečení |
|
Určete zařazování pro argumenty řetězce volání nespravovaného kódu |
|
Zkontrolujte deklarativní zabezpečení na hodnotových typech |
|
Ukazatele by neměly být viditelné |
|
Zabezpečené typy by neměly vystavovat pole |
|
Zabezpečení metody by mělo být nadmnožinou typu |
|
Metody APTCA by měly volat pouze metody APTCA |
|
Typy APTCA by měly rozšiřovat pouze základní typy APTCA |
|
Nezveřejňujte nepřímo metody s požadavky propojení |
|
Požadavky odkazu přepisu by měly být shodné se základem |
|
Zabalte ohrožené klauzule finally do vnějšího bloku try |
|
Požadavky propojení typů vyžadují požadavky dědičnosti |
|
Důležité typy zabezpečení se nemusí účastnit rovnocennosti typu |
|
Výchozí konstruktory musí být alespoň tak kritické jako výchozí konstruktory základního typu |
|
Delegáti musí navázat na metody s konzistentní transparentností |
|
Metody musí při přepisu základních metod zachovat konzistentní transparentnost |
|
Transparentní metody musí obsahovat pouze ověřitelné IL |
|
Transparentní metody nesmí volat metody s atributem SuppressUnmanagedCodeSecurity |
|
Transparentní kód nesmí odkazovat na důležité položky zabezpečení |
|
Transparentní metody nesmí splňovat LinkDemands |
|
Typy musí být alespoň tak kritické jako jejich rozhraní a základní typy |
|
Transparentní metody nemohou používat bezpečnostní vyhodnocení |
|
Transparentní metody nesmí volat do nativního kódu |
|
Znovu vyvolejte výjimku pro zachování podrobností zásobníku |
|
Neuvolňujte objekty několikrát |
|
Statická pole hodnotového typu inicializujte vloženým kódem |
|
Neoznačujte obsluhované komponenty pomocí WebMethod |
|
Uvolnitelná pole by měla být uvolněna |
|
Nevolejte přepisovatelné metody v konstruktorech |
|
Uvolnitelné typy by měly deklarovat finalizační metodu |
|
Finalizační metody by měly volat finalizační metodu základní třídy |
|
Implementujte konstruktory serializace |
|
Je třeba přetížit operátor rovnosti při přetížení ValueType.Equals |
|
Označte vstupní body modelu Windows Forms pomocí STAThread |
|
Označte všechna neserializovatelná pole |
|
Volejte metody základní třídy na typech ISerializable |
|
Označte typy ISerializable pomocí SerializableAttribute |
|
Implementujte správně metody serializace |
|
Implementujte správně rozhraní ISerializable |
|
Poskytněte správné argumenty metodám formátování |
|
Testujte správně hodnotu NaN |
|
Nedeklarujte statické členy v obecných typech |
|
Nezveřejňujte obecné seznamy |
|
Použijte instance obecných obslužných rutin události |
|
Obecné metody by měly poskytnout parametr typu |
|
Vyhněte se nadbytečným parametrům na obecných typech |
|
Nevnořujte obecné typy v signaturách členu |
|
Použijte obecné typy, kde je to vhodné |
|
Výčty by měly mít nulovou hodnotu |
|
Kolekce by měly implementovat obecné rozhraní |
|
Zvažte předání základních typů jako parametrů |
|
Abstraktní typy by neměly mít konstruktory |
|
Je třeba přetížit operátor rovnosti při přetížení sčítání a odečítání |
|
Označte sestavení pomocí CLSCompliantAttribute |
|
Označte sestavení pomocí ComVisibleAttribute |
|
Označte atributy pomocí AttributeUsageAttribute |
|
Definujte přístupové objekty pro argumenty atributu |
|
Indexery by neměly být multidimenzionální |
|
Použijte vlastnosti, kde je to vhodné |
|
Nahraďte opakované argumenty polem parametrů |
|
Výchozí parametry by neměly být použity |
|
Označte výčty pomocí FlagsAttribute |
|
Úložiště výčtu by mělo být typu Int32 |
|
Použijte události, kde je to vhodné |
|
Nezachycujte výjimky obecného typu |
|
Implementuje standardní konstruktory výjimek |
|
Vnořené typy by neměly být viditelné |
|
Implementace rozhraní ICollection mají členy silného typu |
|
Přepište metody srovnatelných typů |
|
Enumerátory by měly být silného typu |
|
Seznamy jsou silného typu |
|
Poskytněte zprávu ObsoleteAttribute |
|
Použijte celočíselný nebo řetězcový argument pro indexery |
|
Vlastnosti by neměly být určené pouze pro zápis |
|
Nepřetěžujte operátory rovnosti na odkazových typech |
|
Nedeklarujte chráněné členy v zapečetěných typech |
|
Nedeklarujte virtuální členy v zapečetěných typech |
|
Deklarujte typy v oborech názvů |
|
Nedeklarujte viditelná instanční pole |
|
Statický vlastník typů by měl být zapečetěný |
|
Statický vlastník typů by neměl mít konstruktory |
|
Parametry identifikátoru URI by neměly být řetězce |
|
Návratové hodnoty identifikátoru URI by neměly být řetězce |
|
Vlastnosti identifikátoru URI by neměly být řetězce |
|
Řetězcové přetížení identifikátoru URI volá přetížení System.Uri |
|
Typy by neměly rozšířit určité základní typy |
|
Členy by neměly zveřejňovat určité konkrétní typy |
|
Výjimky by měly být veřejné |
|
Názvy proměnných by neměly odpovídat názvům polí |
|
Vyhněte se nadměrné složitosti |
|
Identifikátory by se měly lišit o více než použití malý a velkých písmen |
|
Identifikátory by neměly odpovídat klíčovým slovům |
|
Zkontrolujte nepoužité parametry |
|
Odeberte nepoužívané místní hodnoty |
|
Vyhněte se nadměrnému použití místních hodnot |
|
Inicializujte statická pole referenčních typů vloženým kódem |
|
Vyhněte se nevolanému místnímu kódu |
|
Vyhněte se nevytvořeným instancím vnitřních tříd |
|
Vyhněte se nezapečetěným atributům |
|
Preferujte vícenásobná pole před multidimenzionálními |
|
Přepište metodu a operátor rovnosti na hodnotových typech |
|
Vlastnosti by neměly vracet pole |
|
Testujte prázdné řetězce pomocí délky řetězce |
|
Označte členy jako statické |
|
Vyhněte se nepoužitým soukromým polím |
|
Nevyvolávejte vyhrazené typy výjimek |
|
Použijte spravované ekvivalenty rozhraní Win32 API |
|
Vytvořte správně instance výjimky argumentu |
|
Nekonstantní pole by neměla být viditelná |
|
Neoznačujte výčty pomocí FlagsAttribute |
|
Nevyvolávejte výjimky v klauzulích pro zpracování výjimek |
|
Finalizační metody by měly být chráněné |
|
Nesnižujte viditelnost zděděných členů |
|
Členy by se měly lišit o více než jen návratový typ |
|
Přepište metodu rovnosti při přetížení operátoru rovnosti |
|
Přetížení operátoru mají pojmenované alternativy |
|
Operátory by měly mít symetrická přetížení |
|
Vlastnosti vracející kolekce by měly být určeny pouze pro čtení |
|
Použijte parametry pro proměnné argumenty |
|
Předejte objekty System.Uri namísto řetězců |
|
Poskytněte metody deserializace pro volitelná pole |