CA1047: protected 멤버를 sealed 형식으로 선언하지 마십시오.

속성
규칙 ID CA1047
제목 protected 멤버를 sealed 형식으로 선언하지 마세요.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

public 형식은 sealed(Visual basic에서 NotInheritable)이며 protected 멤버나 protected 중첩 형식을 선언합니다. 규칙은 해당 패턴을 따라야 하는 Finalize 메서드에 대한 위반을 보고하지 않습니다.

규칙 설명

형식에서는 상속하는 형식에서 멤버에 액세스하거나 멤버를 재정의할 수 있도록 하기 위해 protected 멤버를 선언합니다. 정의에 따라 sealed 형식은 상속할 수 없으므로 sealed 형식에 대해 protected 메서드를 호출할 수 없습니다.

C# 컴파일러는 이 상황에 대해 CA1047 대신 경고 CS0628 을 내보낸다.

위반 문제를 해결하는 방법

해당 규칙 위반 문제를 해결하려면 멤버의 액세스 수준을 프라이빗으로 변경하거나 형식을 상속할 수 있게 설정합니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다. 형식의 현재 상태를 유지하면 유지 관리 문제가 발생할 수 있으며 어떤 이점도 제공되지 않습니다.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주(디자인)의 모든 규칙에 대해 이 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 API 화면 포함

접근성을 기반으로 이 규칙을 실행할 코드베이스의 파트를 구성할 수 있습니다. 예를 들어 규칙이 퍼블릭이 아닌 API 표면에서만 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.api_surface = private, internal

예시

다음 예제에서는 해당 규칙을 위반하는 형식을 보여 줍니다.

public sealed class SealedClass
{
    protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
    Protected  Sub MyMethod
    End Sub
End Class