CA1052: 정적 소유자 형식은 Static 또는 NotInheritable이어야 합니다

속성
규칙 ID CA1052
타이틀 정적 소유자 형식은 정적 또는 NotInheritable이어야 합니다.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경
.NET 8에서 기본적으로 사용 아니요

원인

비추상 형식에는 정적 멤버(가능한 기본 생성자 제외)만 포함되며 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 한정자를 사용하여 해결

다음 예제에서는 C#에서 형식을 static 한정자로 표시하여 해당 규칙 위반 문제를 해결하는 방법을 보여 줍니다.

public static class StaticMembers
{
    public static int SomeProperty { get; set; }
    public static void SomeMethod() { }
}