Предупреждения использования
Предупреждения использования поддерживают правильное использование платформы .NET Framework.
В этом подразделе
Правило |
Описание |
---|---|
Сигнатура метода включает параметр, не использующийся в основной части метода. |
|
Создается, но никогда не используется новый объект, либо вызывается метод, который создает и возвращает новую строку, и такая новая строка никогда не используется, либо метод COM или P/Invoke возвращает HRESULT или код ошибки, который никогда не используется. |
|
CA1816: вызов GC.SuppressFinalize должен осуществляться правильно |
Метод, являющийся реализацией Dispose, не вызывает GC.SuppressFinalize, либо метод, не являющийся реализацией Dispose, вызывает GC.SuppressFinalize, либо метод вызывает GC.SuppressFinalize и передает что-либо другое (Me в Visual Basic). |
CA2200: следует повторно вызывать исключение для сохранения сведений о стеке |
В операторе throw повторно создается и явным образом задается исключение. Если исключение повторно создается заданием исключения в операторе throw, список вызовов метода между исходным методом, создавшим исключение, и текущим методом будет утерян. |
Из-за этого становится трудно обнаружить и отладить изначальную ошибку. |
|
Реализация метода содержит пути кода, которые могли стать причиной многократного вызова метода System.IDisposable.Dispose или эквивалентного метода Dispose (например, метода Close() для некоторых типов) для одного и того же объекта. |
|
Литеральная строка в теле метода содержит одно или несколько слов, не распознаваемых библиотекой системы проверки орфографии Майкрософт. |
|
Определен метод вызова неуправляемого кода, при этом в библиотеке классов .NET Framework существует метод с эквивалентной функциональностью. |
|
CA2207: инициализируйте статические поля типа значений встроенными средствами |
Тип значения объявляет явный статический конструктор. Чтобы устранить нарушение данного правила, выполните инициализацию всех статических данных при их объявлении и удалите статический конструктор. |
CA2208: правильно создавайте экземпляры аргументов исключений |
Вызывается конструктор по умолчанию (без параметров), принадлежащий к типу исключения ArgumentException или унаследованный от него, или неправильный аргумент строки передается параметризованному конструктору, принадлежащему к типу исключения ArgumentException или унаследованному от него. |
Для статических полей, которые не являются константными и доступными только для чтения, невозможно обеспечить потокобезопасность. Доступ к подобным полям должен тщательно контролироваться, и для синхронизации доступа к такому объекту класса требуются дополнительные методы программирования. |
|
CA2212: не следует помечать обслуживаемые компоненты атрибутом WebMethod |
Метод в типе, унаследованном от System.EnterpriseServices.ServicedComponent, помечен атрибутом System.Web.Services.WebMethodAttribute. Так как атрибут WebMethodAttribute и метод ServicedComponent имеют разное поведение и предъявляют конфликтующие требования к контексту и потоку транзакций, в некоторых сценариях поведение метода будет неправильным. |
Тип, реализующий System.IDisposable, объявляет поля, принадлежащие к типам, которые также реализуют IDisposable. Метод Dispose поля не вызывается методом Dispose объявляющего типа. |
|
CA2214: не вызывайте переопределяемые методы в конструкторах |
Когда конструктор вызывает виртуальный метод, возможна ситуация, когда конструктор для экземпляра, вызывающего метод, не выполняется. |
CA2215: методы Dispose должны вызывать такие же методы базового класса |
Если тип наследуется от удаляемого типа, он должен вызвать метод Dispose базового типа из собственного метода Dispose. |
CA2216: высвобождаемые типы должны объявлять метод завершения |
Тип, который реализует System.IDisposable и имеет поля, предусматривающие использование неуправляемых ресурсов, не реализует метод завершения, как описано в Object.Finalize. |
CA2217: не следует помечать перечисления атрибутом FlagsAttribute |
Доступное для внешнего кода перечисление помечено атрибутом FlagsAttribute и имеет одно или несколько значений, которые не являются числа два или сочетанием других определенных значений в перечислении. |
CA2218: переопределяйте GetHashCode при переопределении Equals |
GetHashCode возвращает значение на основе текущего экземпляра, используемое для алгоритмов хэширования и структур данных, таких как хэш-таблица. Два равных объекта, принадлежащие к одному и тому же типу, должны возвращать один и тот же хэш-код. |
Если исключение создается в предложении finally или fault, новое исключение скрывает активное исключение. Если исключение создается в предложении filter, среда выполнения перехватывает исключение без оповещения. Из-за этого становится трудно обнаружить и отладить изначальную ошибку. |
|
CA2220: методы завершения должны вызывать метод завершения базового класса |
Финализация должна распространятся посредством иерархии наследования. Для этого типы должны вызывать свой метод Finalize базового класса из собственного метода Finalize. |
В методах завершения должен использоваться модификатор доступа из семейства. |
|
Не следует изменять модификатор доступа для унаследованных членов. Если сделать унаследованный член закрытым, то доступ вызывающих объектов к реализации метода базового класса все равно не будет запрещен. |
|
CA2223: члены должны различаться не только возвращаемым типом |
Среда CLR позволяет использовать возвращаемые типы для различения совпадающих в остальном членов, однако эта функция не входит в спецификацию CLS и поддерживается не всеми языками программирования .NET. |
CA2224: переопределяйте равенство при перегрузке оператора равенства |
Открытый тип реализует оператор равенства, но не переопределяет Object.Equals. |
CA2225: для перезагрузок оператора существуют дополнения с именами |
Обнаружена перегрузка оператора, однако не найден ожидаемый именованный альтернативный метод. Именованный альтернативный член предоставляет те же функции, что и основной оператор, и его могут использовать разработчики, которые программируют на языках, не поддерживающих перегрузку операторов. |
Тип реализует оператор равенства или неравенства, но не реализует противоположный оператор. |
|
CA2227: свойства коллекции должны иметь параметр "только для чтения" |
Свойство коллекции, допускающее запись, позволяет пользователю заменять одну коллекцию другой. Свойство только для чтения предотвращает замену коллекции, но по-прежнему допускает установку, настройку отдельных членов. |
Файлы ресурсов, созданные с помощью предварительных версий .NET Framework, могут не работать в поддерживаемых версиях платформы .NET Framework. |
|
Чтобы устранить нарушение этого правила, реализуйте конструктор сериализации. Для запечатанного класса конструктор должен быть закрытым, а в иных случаях — защищенным. |
|
Открытый или защищенный тип содержит открытый или защищенный метод, который использует соглашение о вызовах VarArgs вместо ключевого слова params. |
|
CA2231: перегружать равенство операторов следует при перегрузке ValueType.Equals |
Тип значения переопределяет Object.Equals, но не реализует оператор равенства. |
Атрибут STAThreadAttribute указывает, что потоковой моделью COM для приложения является однопотоковое подразделение. Данный атрибут должен находиться в точке входа любого приложения, использующего Windows Forms; если он отсутствует, компоненты Windows могут работать неправильно. |
|
Прежде чем выполнять арифметические операции, необходимо проверить операнды и убедиться, что результат операции находится в диапазоне возможных значений для используемых типов данных. |
|
Вызывается метод, имеющий параметр строки, имя которого содержит uri, URI, urn, URN, url или URL. Объявляющий тип метода содержит соответствующую перегрузку метода, которая имеет параметр System.Uri. |
|
Экземпляр поля несериализуемого типа объявлен в сериализуемом типе. |
|
CA2236: вызывайте методы базового класса для типов ISerializable |
Чтобы устранить нарушение этого правила, вызовите метод базового типа GetObjectData или конструктор сериализации из соответствующего метода производного типа или конструктора. |
CA2237: пометьте типы ISerializable атрибутом SerializableAttribute |
Чтобы среда CLR распознавала тип как сериализуемый, он должен быть помечен атрибутом SerializableAttribute, даже если тип использует пользовательскую процедуру сериализации посредством реализации интерфейса ISerializable. |
Метод, обрабатывающий событие сериализации, не имеет правильной сигнатуры, возвращаемого типа или отображения. |
|
CA2239: предоставляйте методы десериализации для необязательных полей |
Тип имеет поле, помеченное атрибутом System.Runtime.Serialization.OptionalFieldAttribute, и не предоставляет методы обработки событий десериализации. |
Чтобы устранить нарушение данного правила, сделайте метод GetObjectData доступным для внешнего кода и переопределяемым и убедитесь, что все поля экземпляра включены в процесс сериализации или явно помечены атрибутом NonSerializedAttribute. |
|
CA2241: предоставьте правильные аргументы методам форматирования |
Аргумент формата, переданный методу System.String.Format, не содержит элемент форматирования, соответствующий каждому аргументу объекта, или наоборот. |
Это выражение проверяет значение на соответствие Single.Nan или Double.Nan. Используйте Single.IsNan(Single) или Double.IsNan(Double) для проверки значения. |
|
CA2243: синтаксический анализ строковых литералов атрибута должен осуществляться правильно |
Не удается правильно выполнить синтаксический анализ параметра строкового литерала атрибута для URL-адреса, идентификатора GUID или версии. |
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Август 2010 |
Добавлены отсутствовавшие общие сведения для предупреждений CA1801, CA1806 и CA1816. |
Обратная связь от клиента. |