CA1000: не объявляйте статические элементы в универсальных типах |
При вызове статического элемента универсального типа аргумент типа должен быть указан для типа. Если вызывается универсальный элемент экземпляра, который не поддерживает вывод, аргумент типа должен быть указан для элемента. В этих двух случаях синтаксис для указания аргумента типа отличается и легко путается. |
CA1001: Типы, которые имеют собственные диспозируемые поля, должны быть диспозируемыми |
Класс объявляет и реализует поле экземпляра, которое является типом System.IDisposable, и класс не реализует IDisposable. Класс, объявляющий поле IDisposable косвенно, владеет неуправляемым ресурсом и должен реализовывать интерфейс IDisposable. |
CA1002: не предоставляйте универсальные списки |
System.Collections.Generic.List<(<(T>)>) — это универсальная коллекция, предназначенная для производительности, а не наследования. Поэтому List не содержит никаких виртуальных членов. Вместо этого следует предоставлять универсальные коллекции, предназначенные для наследования. |
CA1003. Используйте экземпляры обработчиков общих событий |
Тип содержит делегат, возвращающий void, у которого сигнатура включает два параметра (первый - объект, второй - тип, который может назначаться в EventArgs), а содержащая сборка нацелена на .NET Framework 2.0. |
CA1005. Избегайте избыточных параметров для универсальных типов |
Чем больше параметров типа содержит универсальный тип, тем сложнее знать и помнить, что представляет каждый параметр типа. Обычно это очевидно с одним параметром типа, как в списке<T>, и в некоторых случаях с двумя параметрами типа, как в словаре<TKey, TValue>. Однако если существуют более двух параметров типа, трудность становится слишком большой для большинства пользователей. |
CA1008: перечисления должны иметь нулевое значение |
Значение по умолчанию неинициализированного перечисления, как и другие типы значений, равно нулю. Перечисление без атрибута Flags должно определять элемент со значением ноль, чтобы значения по умолчанию были допустимыми значениями перечисления. Если перечисление с примененным атрибутом FlagsAttribute определяет элемент с нулевой значением, его имя должно быть "None", чтобы указать, что значения в перечислении не заданы. |
CA1010: коллекции должны реализовывать универсальный интерфейс |
Чтобы расширить удобство использования коллекции, реализуйте один из универсальных интерфейсов коллекции. Затем коллекцию можно использовать для заполнения универсальных типов коллекций. |
CA1012: у абстрактных типов не должно быть открытых конструкторов |
Конструкторы абстрактных типов могут вызываться только производными типами. Так как открытые конструкторы создают экземпляры типа, и вы не можете создавать экземпляры абстрактного типа, абстрактный тип с открытым конструктором неправильно разработан. |
CA1014: пометьте сборки с помощью CLSCompliantAttribute |
Спецификация общего языка (CLS) определяет ограничения именования, типы данных и правила, для которых сборки должны соответствовать, если они будут использоваться на разных языках программирования. Хороший дизайн определяет, что все сборки явно указывают на соответствие CLS с помощью CLSCompliantAttribute. Если этот атрибут отсутствует в сборке, сборка не соответствует требованиям. |
CA1016: отметьте сборки с помощью AssemblyVersionAttribute |
.NET использует номер версии для уникальной идентификации сборки и привязки к типам в строго именованных сборках. Номер версии используется вместе с политикой версии и издателя. По умолчанию приложения выполняются только с версией сборки, с которой они были созданы. |
CA1017: пометьте сборки с помощью ComVisibleAttribute |
ComVisibleAttribute определяет, как клиенты COM получают доступ к управляемому коду. Хороший дизайн требует, чтобы сборки явно указывали на COM-видимость. Видимость COM можно задать для всей сборки, а затем переопределить для отдельных типов и элементов типов. Если этот атрибут отсутствует, содержимое сборки отображается клиентам COM. |
CA1018: пометьте атрибуты, используя AttributeUsageAttribute |
При определении настраиваемого атрибута пометьте его с помощью AttributeUsageAttribute, чтобы указать, где в исходном коде можно применить пользовательский атрибут. Значение и предполагаемое использование атрибута определяет допустимые расположения в коде. |
CA1019: определите методы доступа для аргументов атрибутов |
Атрибуты могут определять обязательные аргументы, которые необходимо указать при применении атрибута к целевому объекту. Они также называются позиционных аргументами, так как они предоставляются конструкторам атрибутов в качестве позиционных параметров. Для каждого обязательного аргумента атрибут также должен предоставить соответствующее свойство только для чтения, чтобы значение аргумента можно было получить во время выполнения. Атрибуты также могут определять необязательные аргументы, которые также называются именованными аргументами. Эти аргументы предоставляются конструкторам атрибутов по имени и должны иметь соответствующее свойство чтения и записи. |
CA1021: избегайте использования параметров |
Для передачи типов по ссылке (с помощью out или ref) требуется опыт работы с указателями, понимание того, как типы значений и ссылочные типы отличаются, а также обрабатывать методы с несколькими возвращаемыми значениями. Кроме того, разница между параметрами out и ref не понимается широко. |
CA1024: используйте свойства, где это уместно |
Общедоступный или защищенный метод имеет имя, которое начинается с "Get", не принимает параметров и возвращает значение, которое не является массивом. Метод может быть хорошим кандидатом, чтобы стать свойством. |
CA1027: обозначьте перечисления с помощью FlagsAttribute |
Перечисление — это тип значения, определяющий набор связанных именованных констант. Примените FlagsAttribute к перечислению, когда его именованные константы могут быть осмысленно объединены. |
CA1028: хранилище перечисления должно быть Int32 |
Перечисление — это тип значения, определяющий набор связанных именованных констант. По умолчанию тип данных System.Int32 используется для хранения константного значения. Несмотря на то, что этот базовый тип можно изменить, он не требуется или рекомендуется для большинства сценариев. |
CA1030: используйте события, где это уместно |
Это правило определяет методы с именами, которые обычно используются для событий. Если метод вызывается в ответ на четко определенное изменение состояния, метод должен вызываться обработчиком событий. Объекты, вызывающие метод, должны вызывать события вместо прямого вызова метода. |
CA1031: не перехватывать общие типы исключений |
Общие исключения не должны быть перехвачены. Перехватите более конкретное исключение или перебросьте общее исключение в последней инструкции блока catch. |
CA1032: реализация стандартных конструкторов исключений |
Не удается предоставить полный набор конструкторов, что затрудняет правильную обработку исключений. |
CA1033: методы интерфейса должны вызываться дочерними типами |
Непечатанный внешне видимый тип предоставляет явную реализацию метода публичного интерфейса и не предоставляет другого внешне видимого метода с тем же именем. |
CA1034: вложенные типы не должны быть видимыми |
Вложенный тип — это тип, объявленный в области другого типа. Вложенные типы полезны для инкапсулирования сведений о частной реализации содержащего типа. Для этой цели вложенные типы не должны быть видимыми во внешнем виде. |
CA1036: переопределение методов для сопоставимых типов |
Общедоступный или защищенный тип реализует интерфейс System.IComparable. Он не переопределяет метод Object.Equals и не перегружает оператор языка для равенства, неравенства, а также для операций «меньше чем» или «больше чем». |
CA1040. Избегайте пустых интерфейсов |
Интерфейсы определяют членов, предоставляющих контракт для поведения или использования. Функции, описанные интерфейсом, могут быть приняты любым типом независимо от того, где тип отображается в иерархии наследования. Тип реализует интерфейс, предоставляя реализации для членов интерфейса. Пустой интерфейс не определяет никаких элементов; Поэтому он не определяет контракт, который можно реализовать. |
CA1041: предоставьте сообщение ObsoleteAttribute |
Тип или член помечается с помощью атрибута System.ObsoleteAttribute, который не имеет указанного свойства ObsoleteAttribute.Message. При компиляции типа или элемента, помеченного с помощью ObsoleteAttribute, отображается свойство Message атрибута, которое предоставляет пользователю сведения об устаревшем типе или члене. |
CA1043: используйте целочисленный или строковый аргумент для индексаторов |
Индексаторы (то есть индексированные свойства) должны использовать целочисленные или строковые типы для индекса. Эти типы обычно используются для индексирования структур данных, и они повышают удобство использования библиотеки. Использование типа объекта должно быть ограничено в тех случаях, когда конкретный целочисленный или строковый тип нельзя указать во время разработки. |
CA1044: свойства не должны записываться только |
Хотя это приемлемо и часто необходимо иметь свойство только для чтения, рекомендации по проектированию запрещают использование свойств только для записи. Это связано с тем, что пользователь может задать значение, но не позволяет ему просматривать это значение, что не обеспечивает никакой безопасности. Кроме того, без доступа на чтение состояние общих объектов невозможно просмотреть, что ограничивает их полезность. |
CA1045: не передавать типы по ссылке |
Для передачи типов по ссылке (с помощью out или ref) требуется опыт работы с указателями, понимание того, как типы значений и ссылочные типы отличаются, а также обрабатывать методы с несколькими возвращаемыми значениями. Библиотечные архитекторы, которые проектируют для широкой аудитории, не должны ожидать, что пользователи станут сведущими в работе с параметрами out или ref. |
CA1046: не перегружайте оператор равенства для ссылочных типов |
Для ссылочных типов реализация оператора равенства по умолчанию почти всегда правильна. По умолчанию две ссылки равны только в том случае, если они указывают на один и тот же объект. |
CA1047: не объявляйте защищенные элементы в запечатанных типах |
Типы объявляют защищенные элементы таким образом, чтобы наследуемые типы могли получить доступ к элементу или переопределить его. По определению, запечатанные типы не могут быть унаследованы, что означает, что защищенные методы в запечатанных типах вызывать нельзя. |
CA1050: объявление типов в пространствах имен |
Типы объявляются в пространствах имен, чтобы предотвратить столкновения имен и как способ упорядочить связанные типы в иерархии объектов. |
CA1051: не объявляйте поля экземпляра, доступные для просмотра |
Основное использование поля должно быть в качестве детали реализации. Поля должны быть закрытыми или внутренними и должны предоставляться с помощью свойств. |
CA1052: типы статических держателей должны быть запечатаны |
Общедоступный или защищенный тип содержит только статические члены и не объявляется с использованием модификатора sealed (C#) или NotInheritable (Visual Basic). Тип, который не предназначен для наследования, должен быть помечен с помощью запечатанного модификатора, чтобы предотвратить его использование в качестве базового типа. |
CA1053: типы статических держателей не должны иметь конструкторы |
Общедоступный или вложенный открытый тип объявляет только статические элементы и имеет открытый или защищенный конструктор по умолчанию. Конструктор не требуется, так как вызов статических элементов не требует экземпляра типа. Строковая перегрузка должна вызывать перегрузку универсального идентификатора ресурса (URI), использующую строковый аргумент для надежности и безопасности. |
CA1054: параметры URI не должны быть строками |
Если метод принимает строковое представление URI, следует предоставить соответствующую перегруженную версию, которая принимает экземпляр класса URI и предоставляет эти сервисы безопасным образом. |
CA1055: возвращаемые значения URI не должны быть строками |
Это правило предполагает, что метод возвращает универсальный код ресурса (URI). Строковое представление URI подвержено ошибкам синтаксического анализа и кодирования и может привести к уязвимостям безопасности. Класс System.Uri предоставляет эти службы надежным и безопасным способом. |
CA1056: свойства URI не должны быть строками |
Это правило предполагает, что свойство представляет универсальный код ресурса (URI). Строковое представление URI подвержено ошибкам синтаксического анализа и кодирования и может привести к уязвимостям безопасности. Класс System.Uri предоставляет эти службы безопасным и надежным способом. |
CA1058. Типы не должны расширять определенные базовые типы |
Внешний видимый тип расширяет определенные базовые типы. Используйте один из вариантов. |
CA1060: переместить P/Invokes в класс NativeMethods |
Методы Platform Invocation, такие как методы, обозначенные System.Runtime.InteropServices.DllImportAttribute, или методы, определенные с помощью ключевого слова Declare в Visual Basic, получают доступ к неуправляемому коду. Эти методы должны иметь класс NativeMethods, SafeNativeMethods или UnsafeNativeMethods. |
CA1061: не скрывайте методы базового класса |
Метод в базовом типе скрыт одинаково именованным методом в производном типе, если сигнатура параметра производного метода отличается только по типам, которые более слабо производны, чем соответствующие типы в сигнатуре параметра базового метода. |
CA1062: проверка аргументов общедоступных методов |
Все ссылочные аргументы, передаваемые внешним видимым методам, должны быть проверены на значение NULL. |
CA1063: правильно реализуйте IDisposable |
Все типы IDisposable должны корректно реализовывать шаблон Dispose. |
CA1064: исключения должны быть общедоступными |
Внутреннее исключение отображается только внутри собственной внутренней области. После того как исключение выходит за пределы внутренней области, для перехвата исключения можно использовать только базовое исключение. Если внутреннее исключение наследуется от System.Exception, System.SystemExceptionили System.ApplicationException, внешний код не будет иметь достаточно информации, чтобы узнать, что делать с исключением. |
CA1065: не вызывайте исключения в неожиданных местах |
Метод, который не должен вызывать исключения, вызывает исключение. |
CA1066: реализуйте интерфейс IEquatable при переопределении Equals |
Тип значения переопределяет метод Equals, но не реализует IEquatable<T>. |
CA1067: переопределение метода Equals при реализации IEquatable |
Тип реализует IEquatable<T>, но не переопределяет метод Equals. |
CA1068: параметры CancellationToken должны быть последними |
Метод имеет параметр CancellationToken, который не является последним параметром. |
CA1069: перечисления не должны содержать повторяющиеся значения |
Перечисление содержит несколько элементов, которые явно назначаются одному и тому же константному значению. |
CA1070: не объявляйте поля событий как виртуальные |
Событие , подобное полю, было объявлено как виртуальное. |