CA1052: 정적 소유자 형식은 Static 또는 NotInheritable이어야 합니다
속성 | 값 |
---|---|
규칙 ID | CA1052 |
제목 | 정적 소유자 형식은 정적 또는 NotInheritable이어야 합니다. |
범주 | 디자인 |
수정 사항이 주요 변경인지 여부 | 주요 변경 |
.NET 9에서 기본적으로 사용 | 아니요 |
원인
비추상 형식에는 정적 멤버(가능한 기본 생성자 제외)만 포함되며 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() { }
}
.NET