Поделиться через


CA1000: не объявляйте статические элементы в универсальных типах

TypeName

DoNotDeclareStaticMembersOnGenericTypes

CheckId

CA1000

Категория

Microsoft.Design

Критическое изменение

Критическое изменение

Причина

Видимый снаружи универсальный тип содержит элемент с модификатором static (Shared в Visual Basic).

Описание правила

При вызове метода универсального типа с модификатором static для типа нужно указать аргумент типа. При вызове универсального экземпляра элемента, не поддерживающего вывод типа, для элемента нужно указать аргумент типа. Синтаксис для аргумента типа различается в этих двух случаях, его легко перепутать, как показано в следующих вызовах:

' Shared method in a generic type.
GenericType(Of Integer).SharedMethod()

' Generic instance method that does not support inference.
someObject.GenericMethod(Of Integer)()
// Static method in a generic type.
GenericType<int>.StaticMethod();

// Generic instance method that does not support inference.
someObject.GenericMethod<int>();

В общем случае следует избегать заблаговременного объявления, чтобы не при вызове элемента не требовалось указывать аргумент типа. В результате синтаксис вызова элемента для универсальных типов не будет отличаться от синтаксиса для неуниверсальных типов. Дополнительные сведения см. в разделе CA1004: универсальные методы должны предоставлять параметр типа.

Устранение нарушений

Чтобы устранить нарушение этого правила, удалите статический элемент или измените его, сделав его элементов экземпляра.

Отключение предупреждений

Для этого правила отключать вывод предупреждений не следует. Использование универсальных типов в синтаксисе, который легко понимать и использовать, сокращает время, необходимое на обучение, и улучшает скорость адаптации новых библиотек.

Связанные правила

CA1005: не используйте слишком много параметров в универсальных типах

CA1010: коллекции должны реализовывать универсальный интерфейс

CA1002: не следует раскрывать универсальные списки

CA1006: не вкладывайте универсальные типы в сигнатуры членов

CA1004: универсальные методы должны предоставлять параметр типа

CA1003: используйте экземпляры обработчика универсальных событий

CA1007: используйте универсальные методы, если это уместно

См. также

Ссылки

Универсальные шаблоны (Руководство по программированию на C#)