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


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() { }
}