Набор правил "Базовые нормы и правила разработки" для управляемого кодаBasic Design Guideline Rules rule set for managed code

Вы можете использовать набор правил по рекомендациям по проектированию Microsoft Basic, чтобы сосредоточиться на том, как упростить понимание и использование кода.You can use the Microsoft Basic Design Guideline Rules rule set to focus on making your code easier to understand and use. Этот набор правил следует включать, если проект включает в себя код библиотеки или если вы хотите применить рекомендации для кода, который легко поддерживать.You should include this rule set if your project includes library code or if you want to enforce best practices for code that is easy to maintain.

Базовые правила разработки включают в себя все правила в наборе правил " управляемые Рекомендуемые правила ".The Basic Design Guideline Rules include all the rules in the Managed Recommended Rules rule set.

В следующей таблице описаны все правила набора правил "базовые правила для разработки Microsoft".The following table describes all of the rules in the Microsoft Basic Design Guideline Rules rule set.

ПравилоRule ОписаниеDescription
CA1000CA1000 Не объявляйте статические члены в универсальных типахDo not declare static members on generic types
CA1001CA1001 Типы, которым принадлежат освобождаемые поля, должны быть освобождаемымиTypes that own disposable fields should be disposable
CA1002CA1002 Не предоставляйте универсальные спискиDo not expose generic lists
CA1003CA1003 Используйте экземпляры обработчика универсальных событийUse generic event handler instances
CA1004CA1004 Универсальные методы должны предоставлять параметр типаGeneric methods should provide type parameter
CA1005CA1005 Не используйте слишком много параметров в универсальных типахAvoid excessive parameters on generic types
CA1006CA1006 Не создавайте вложенные универсальные типы в сигнатурах членовDo not nest generic types in member signatures
CA1007CA1007 По возможности используйте универсальные объектыUse generics where appropriate
CA1008CA1008 Перечисляемые типы должны иметь нулевое значениеEnums should have zero value
CA1009CA1009 Правильно объявляйте обработчики событийDeclare event handlers correctly
CA1010CA1010 Коллекции должны реализовать универсальный интерфейсCollections should implement generic interface
CA1011CA1011 Попробуйте передать базовые типы в качестве параметровConsider passing base types as parameters
CA1012CA1012 Абстрактные типы не должны иметь конструкторыAbstract types should not have constructors
CA1013CA1013 Перегружайте оператор равенства при перегрузке операторов сложения и вычитанияOverload operator equals on overloading add and subtract
CA1014CA1014 Пометьте сборки с помощью CLSCompliantAttributeMark assemblies with CLSCompliantAttribute
CA1016CA1016 Пометьте сборки с помощью AssemblyVersionAttributeMark assemblies with AssemblyVersionAttribute
CA1017CA1017 Пометьте сборки с помощью ComVisibleAttributeMark assemblies with ComVisibleAttribute
CA1018CA1018 Пометьте атрибуты с помощью AttributeUsageAttributeMark attributes with AttributeUsageAttribute
CA1019CA1019 Определите методы доступа для аргументов атрибутаDefine accessors for attribute arguments
CA1023CA1023 Индексы не должны быть многомернымиIndexers should not be multidimensional
CA1024CA1024 По возможности используйте свойстваUse properties where appropriate
CA1025CA1025 Замените повторяющиеся аргументы массивом параметровReplace repetitive arguments with params array
CA1026CA1026 Не следует использовать параметры по умолчаниюDefault parameters should not be used
CA1027CA1027 Пометьте перечисляемые типы с помощью FlagsAttributeMark enums with FlagsAttribute
CA1028CA1028 Хранилище перечисляемых типов должно относиться к типу Int32Enum storage should be Int32
CA1030CA1030 По возможности используйте событияUse events where appropriate
CA1031CA1031 Не перехватывайте типы общих исключенийDo not catch general exception types
CA1032CA1032 Реализуйте стандартные конструкторы исключенийImplement standard exception constructors
CA1033CA1033 Методы интерфейса должны быть доступны для вызова дочерними типамиInterface methods should be callable by child types
CA1034CA1034 Вложенные типы не должны быть видимымиNested types should not be visible
CA1035CA1035 В составе реализаций ICollection есть члены со строгим типомICollection implementations have strongly typed members
CA1036CA1036 Переопределите методы в сопоставимых типахOverride methods on comparable types
CA1038CA1038 Перечислители должны иметь строгие типыEnumerators should be strongly typed
CA1039CA1039 Списки имеют строгие типыLists are strongly typed
CA1041CA1041 Укажите сообщение ObsoleteAttributeProvide ObsoleteAttribute message
CA1043CA1043 Используйте целый или строковый аргумент для индексаторовUse integral or string argument for indexers
CA1044CA1044 Свойства не должны быть доступными только для записиProperties should not be write only
CA1046CA1046 Не перегружайте оператор равенства для ссылочных типовDo not overload operator equals on reference types
CA1047CA1047 Не объявляйте защищенные члены в запечатанных типахDo not declare protected members in sealed types
CA1048CA1048 Не объявляйте виртуальные члены в запечатанных типахDo not declare virtual members in sealed types
CA1049CA1049 Типы, которым принадлежат собственные ресурсы, должны быть освобождаемымиTypes that own native resources should be disposable
CA1050CA1050 Объявите типы в пространствах именDeclare types in namespaces
CA1051CA1051 Не объявляйте видимые поля экземпляровDo not declare visible instance fields
CA1052CA1052 Типы со статическими заполнителями должны быть запечатаныStatic holder types should be sealed
CA1053CA1053 Типы со статическими заполнителями не должны иметь конструкторыStatic holder types should not have constructors
CA1054CA1054 Параметры URI не должны быть строкамиURI parameters should not be strings
CA1055CA1055 Возвращаемые значения URI не должны быть строкамиURI return values should not be strings
CA1056CA1056 Свойства URI не должны быть строкамиURI properties should not be strings
CA1057CA1057 Перегрузки строковых параметров URI вызывают перегрузки System.UriString URI overloads call System.Uri overloads
CA1058CA1058 Типы не должны расширять определенные базовые типыTypes should not extend certain base types
CA1059CA1059 Члены не должны предоставлять определенные конкретные типыMembers should not expose certain concrete types
CA1060CA1060 Переместите методы P/Invoke в класс NativeMethodsMove P/Invokes to NativeMethods class
CA1061CA1061 Не скрывайте методы базовых классовDo not hide base class methods
CA1063CA1063 Правильно реализуйте IDisposableImplement IDisposable correctly
CA1064CA1064 Исключения должны быть общимиExceptions should be public
CA1065CA1065 Не вызывайте исключения в непредвиденных местахDo not raise exceptions in unexpected locations
CA1301CA1301 Избегайте повторяющихся акселераторовAvoid duplicate accelerators
CA1400CA1400 Для методов P/Invoke должны существовать точки входаP/Invoke entry points should exist
CA1401CA1401 Методы P/Invoke не должны быть видимымиP/Invokes should not be visible
CA1403CA1403 Типы с автомакетом не должны быть видимыми для COMAuto layout types should not be COM visible
CA1404CA1404 Вызывайте GetLastError сразу после P/InvokeCall GetLastError immediately after P/Invoke
CA1405CA1405 Базовые типы, относящиеся к типу, видимому для COM, должны быть видимыми для COMCOM visible type base types should be COM visible
CA1410CA1410 Методы регистрации COM должны быть согласованнымиCOM registration methods should be matched
CA1415CA1415 Правильно объявляйте методы P/InvokeDeclare P/Invokes correctly
CA1500CA1500 Имена переменных не должны совпадать с именами полейVariable names should not match field names
CA1502CA1502 Избегайте чрезмерной сложностиAvoid excessive complexity
CA1708CA1708 Идентификаторы должны отличаться не только прописными и строчными буквамиIdentifiers should differ by more than case
CA1716CA1716 Идентификаторы не должны совпадать с ключевыми словамиIdentifiers should not match keywords
CA1801CA1801 Проверьте неиспользуемые параметрыReview unused parameters
CA1804CA1804 Удалите неиспользуемые локальные переменныеRemove unused locals
CA1809CA1809 Избегайте лишних локальных переменныхAvoid excessive locals
CA1810CA1810 Инициализируйте статические поля ссылочных типов при объявленииInitialize reference type static fields inline
CA1811CA1811 Избегайте невызываемого частного кодаAvoid uncalled private code
CA1812CA1812 Избегайте неиспользуемых внутренних классовAvoid uninstantiated internal classes
CA1813CA1813 Избегайте незапечатанных атрибутовAvoid unsealed attributes
CA1814CA1814 Используйте массивы массивов вместо многомерных массивовPrefer jagged arrays over multidimensional
CA1815CA1815 Переопределяйте операторы Equals и равенства для типов значенийOverride equals and operator equals on value types
CA1819CA1819 Свойства не должны возвращать массивыProperties should not return arrays
CA1820CA1820 Проверяйте наличие пустых строк, используя длину строкиTest for empty strings using string length
CA1821CA1821 Удалите пустые методы завершенияRemove empty finalizers
CA1822CA1822 Пометьте члены как статическиеMark members as static
CA1823CA1823 Избегайте неиспользуемых частных полейAvoid unused private fields
CA1900CA1900 Поля типов значений должны быть переносимымиValue type fields should be portable
CA1901CA1901 Объявления P/Invoke должны быть переносимымиP/Invoke declarations should be portable
CA2002CA2002 Не блокируйте объекты с ненадежными удостоверениямиDo not lock on objects with weak identity
CA2100CA2100 Проверьте запросы SQL на наличие уязвимостей системы безопасностиReview SQL queries for security vulnerabilities
CA2101CA2101 Укажите тип маршалинга для строковых аргументов P/InvokeSpecify marshaling for P/Invoke string arguments
CA2108CA2108 Проверьте объявляемые параметры безопасности типов значенийReview declarative security on value types
CA2111CA2111 Указатели не должны быть видимымиPointers should not be visible
CA2112CA2112 Защищенные типы не должны предоставлять поляSecured types should not expose fields
CA2114CA2114 Безопасность метода должна быть надмножеством типаMethod security should be a superset of type
CA2116CA2116 APTCA-методы должны вызывать только APTCA-методыAPTCA methods should only call APTCA methods
CA2117CA2117 APTCA-типы должны расширять только базовые APTCA-типыAPTCA types should only extend APTCA base types
CA2122CA2122 Не используйте косвенное представление методов с требованиями ссылкиDo not indirectly expose methods with link demands
CA2123CA2123 Переопределяющие требования ссылки должны быть идентичны базовымOverride link demands should be identical to base
CA2124CA2124 Ограничьте уязвимые предложения finally во внешних блоках tryWrap vulnerable finally clauses in outer try
CA2126CA2126 Для требований ссылок на тип необходимы требования наследованияType link demands require inheritance demands
CA2131CA2131 Критические для безопасности типы не могут участвовать в эквивалентности типовSecurity critical types may not participate in type equivalence
CA2132CA2132 Конструкторы по умолчанию должны быть по меньшей мере такими же критическими, как конструкторы по умолчанию базового типаDefault constructors must be at least as critical as base type default constructors
CA2133CA2133 Делегаты должны быть привязаны к методам с соответствующей прозрачностьюDelegates must bind to methods with consistent transparency
CA2134CA2134 Методы должны сохранять одинаковую прозрачность при переопределении базовых методовMethods must keep consistent transparency when overriding base methods
CA2137CA2137 Прозрачные методы должны содержать только поддающийся проверке промежуточный языкTransparent methods must contain only verifiable IL
CA2138CA2138 Прозрачные методы не должны вызывать методы с атрибутом SuppressUnmanagedCodeSecurityTransparent methods must not call methods with the SuppressUnmanagedCodeSecurity attribute
CA2140CA2140 Прозрачный код не должен ссылаться на критические для безопасности элементыTransparent code must not reference security critical items
CA2141CA2141 Прозрачные методы не должны соответствовать требованиям LinkDemandTransparent methods must not satisfy LinkDemands
CA2146CA2146 Типы должны быть по крайней мере настолько же критическими, как их базовые типы и интерфейсыTypes must be at least as critical as their base types and interfaces
CA2147CA2147 Прозрачные методы могут не использовать утверждения безопасностиTransparent methods may not use security asserts
CA2149CA2149 Прозрачные методы не должны вызывать машинный кодTransparent methods must not call into native code
CA2200CA2200 Повторно порождайте исключения для сохранения сведений стекаRethrow to preserve stack details
CA2201CA2201 Не порождайте исключения зарезервированных типовDo not raise reserved exception types
CA2202CA2202 Не ликвидируйте объекты несколько разDo not dispose objects multiple times
CA2205CA2205 Используйте управляемые эквиваленты Win32 APIUse managed equivalents of Win32 API
CA2207CA2207 Используйте встроенную инициализацию статических полей типов значенийInitialize value type static fields inline
CA2208CA2208 Правильно создавайте экземпляры исключений аргументовInstantiate argument exceptions correctly
CA2211CA2211 Поля, не являющиеся константами, не должны быть видимымиNon-constant fields should not be visible
CA2212CA2212 Не помечайте обслуживаемые компоненты с помощью WebMethodDo not mark serviced components with WebMethod
CA2213CA2213 Следует высвобождать высвобождаемые поляDisposable fields should be disposed
CA2214CA2214 Не вызывайте переопределяемые методы в конструкторахDo not call overridable methods in constructors
CA2216CA2216 Высвобождаемые типы должны объявлять методы завершенияDisposable types should declare finalizer
CA2217CA2217 Не помечайте перечисляемые типы с помощью FlagsAttributeDo not mark enums with FlagsAttribute
CA2219CA2219 В предложениях с исключениями не должны порождаться исключенияDo not raise exceptions in exception clauses
CA2220CA2220 Методы завершения должны вызывать метод завершения базового классаFinalizers should call base class finalizer
CA2221CA2221 Методы завершения должны быть защищеннымиFinalizers should be protected
CA2222CA2222 Не уменьшайте видимость наследуемого членаDo not decrease inherited member visibility
CA2223CA2223 Члены должны различаться не только возвращаемым типомMembers should differ by more than return type
CA2224CA2224 Переопределяйте Equals при перегрузке оператора равенстваOverride equals on overloading operator equals
CA2225CA2225 Для перегрузок операторов существуют варианты с именамиOperator overloads have named alternates
CA2226CA2226 Перегрузки операторов должны быть симметричнымиOperators should have symmetrical overloads
CA2227CA2227 Свойства, возвращающие коллекции, должны быть доступными только для чтенияCollection properties should be read only
CA2229CA2229 Реализуйте конструкторы сериализацииImplement serialization constructors
CA2230CA2230 Используйте параметры для аргументов переменнойUse params for variable arguments
CA2231CA2231 Перегрузите оператор равенства на переопределяющем типе ValueType.EqualsOverload operator equals on overriding ValueType.Equals
CA2232CA2232 Отметьте точки входа Windows Forms меткой STAThreadMark Windows Forms entry points with STAThread
CA2234CA2234 Передавайте объекты System.Uri вместо строкPass System.Uri objects instead of strings
CA2235CA2235 Пометьте все несериализуемые поляMark all non-serializable fields
CA2236CA2236 Вызывайте методы базового класса для типов ISerializableCall base class methods on ISerializable types
CA2237CA2237 Пометьте типы ISerializable атрибутом SerializableAttributeMark ISerializable types with SerializableAttribute
CA2238CA2238 Правильно реализуйте методы сериализацииImplement serialization methods correctly
CA2239CA2239 Обеспечьте наличие методов десериализации в необязательных поляхProvide deserialization methods for optional fields
CA2240CA2240 Правильно реализуйте ISerializableImplement ISerializable correctly
CA2241CA2241 Задайте правильные аргументы для методов форматированияProvide correct arguments to formatting methods
CA2242CA2242 Правильно выполняйте проверку NaNTest for NaN correctly