Share via


CA1070: 이벤트 필드를 가상으로 선언하지 마세요.

속성
규칙 ID CA1070
타이틀 이벤트 필드를 가상으로 선언하지 마세요.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경
.NET 8에서 기본적으로 사용 제안 사항

원인

필드와 유사한 이벤트가 가상으로 선언되었습니다.

기본적으로 이 규칙은 외부에 표시되는 형식만 확인하지만 이는 구성 가능합니다.

규칙 설명

다음 .NET 디자인 지침에 따라 파생 클래스에서 기본 클래스 이벤트를 발생시킵니다. 기본 클래스에서 가상 이벤트를 선언하면 안 됩니다. 파생 클래스의 재정의된 이벤트에 정의되지 않은 동작이 있습니다. C# 컴파일러는 해당 이벤트를 올바르게 처리하지 않으며 파생 이벤트의 구독자가 실제로 기본 클래스 이벤트를 구독할지를 예측할 수 없습니다.

using System;
public class C
{
    // CA1070: Event 'ThresholdReached' should not be declared virtual.
    public virtual event EventHandler ThresholdReached;
}

위반 문제를 해결하는 방법

해당 .NET 디자인 지침을 따르고 가상 필드와 유사한 이벤트를 방지합니다.

경고를 표시하지 않는 경우

이벤트가 이미 제공된 라이브러리에 속한 외부에 표시되는 퍼블릭 API인 경우 라이브러리 소비자의 호환성이 손상되는 변경을 방지하기 위해 해당 규칙에서 경고를 표시하지 않는 것이 안전합니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA1070
// The code that's violating the rule is on this line.
#pragma warning restore CA1070

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1070.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

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

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

특정 API 화면 포함

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

dotnet_code_quality.CAXXXX.api_surface = private, internal

참고 항목