CA1052: типы со статическими заполнителями должны быть Static или NotInheritable
Свойство | Значение |
---|---|
Идентификатор правила | CA1052 |
Заголовок | Типы статических держателей должны быть статическими или неистранимыми |
Категория | Проектирование |
Исправление является критическим или не критическим | Критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Неабстрактный тип содержит только статические элементы (кроме возможного конструктора по умолчанию) и не объявляется с модификатором static или Shared.
По умолчанию это правило проверяет только видимые извне типы, но это поведение можно настроить.
Описание правила
Правило CA1052 предполагает, что тип, содержащий только статические элементы, не предназначен для наследования, так как не предоставляет никакие функции, которые можно переопределить в производном типе. Тип, который не предназначен для наследования, в C# должен быть помечен модификатором static
, чтобы запретить его использование в качестве базового типа. Кроме того, его конструктор по умолчанию должен быть удален. В Visual Basic класс должен быть преобразован в модуль.
Это правило не срабатывает для абстрактных классов или классов, имеющих базовый класс. Однако оно срабатывает для классов, поддерживающих пустой интерфейс.
Примечание.
В последней реализации анализатора этого правила он также охватывает функциональность правила CA1053.
Устранение нарушений
Чтобы устранить нарушение этого правила, пометьте тип как static
и удалите конструктор по умолчанию (C#) или преобразуйте его в модуль (Visual Basic).
Когда лучше отключить предупреждения
Вы можете отменить предупреждения о нарушениях этого правила в следующих случаях.
- Тип предназначен для наследования. Отсутствие модификатора
static
предполагает, что тип может использоваться в качестве базового типа. - Тип используется в качестве аргумента типа. Статические типы нельзя использовать в качестве аргументов типов.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1052
// The code that's violating the rule is on this line.
#pragma warning restore CA1052
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1052.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Настройка кода для анализа
Используйте следующий параметр, чтобы выбрать части базы кода для применения этого правила.
Этот параметр можно настроить только для этого правила, для всех правил, к которым он применяется, или для всех правил в этой категории (конструкторе), к которым она применяется. Дополнительные сведения см. в статье Параметры конфигурации правила качества кода.
Включение определенных контактных зон API
Вы можете настроить, для каких частей базы кода следует выполнять это правило в зависимости от их доступности. Например, чтобы указать, что правило должно выполняться только для закрытой контактной зоны API, добавьте следующую пару "ключ-значение" в файл EDITORCONFIG в своем проекте:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Пример нарушения
В следующем примере показан тип, нарушающий это правило:
public class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}
Imports System
Namespace ca1052
Public Class StaticMembers
Shared Property SomeProperty As Integer
Private Sub New()
End Sub
Shared Sub SomeMethod()
End Sub
End Class
End Namespace
Исправление с помощью модификатора static
В следующем примере показано, как устранить нарушение этого правила, пометив тип модификатором static
в C#:
public static class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}