CA1009: 이벤트 처리기를 제대로 선언하십시오.
TypeName |
DeclareEventHandlersCorrectly |
CheckId |
CA1009 |
범주 |
Microsoft.Design |
변경 수준 |
주요 변경 |
원인
public 또는 protected 이벤트를 처리하는 대리자에 올바른 시그니처, 반환 형식 또는 매개 변수 이름이 없습니다.
규칙 설명
이벤트 처리기 메서드는 두 개의 매개 변수를 사용합니다. 첫 번째 매개 변수는 System.Object 형식이고 이름은 'sender'입니다. 이 매개 변수는 이벤트를 발생시킨 개체입니다. 두 번째 매개 변수는 System.EventArgs 형식이고 이름은 'e'입니다. 이 매개 변수는 이벤트와 관련된 데이터입니다. 예를 들어, 파일을 열 때마다 이벤트가 발생하면 이벤트 데이터에는 대개 파일 이름이 포함됩니다.
이벤트 처리기 메서드는 값을 반환하면 안 됩니다. C# 프로그래밍 언어에서는 반환 값 void로 이를 나타냅니다. 이벤트 처리기는 여러 개체의 여러 메서드를 호출할 수 있습니다. 이들 메서드가 값을 반환할 수 있으면 각 이벤트에 여러 개의 반환 값이 발생하게 되고 마지막으로 호출된 메서드의 값만 사용할 수 있게 됩니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 대리자의 시그니처, 반환 형식 또는 매개 변수 이름을 올바로 수정합니다. 자세한 내용은 다음 예제를 참조하십시오.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
다음 예제에서는 이벤트를 처리하는 데 적합한 대리자를 보여 줍니다. 디자인 지침에 지정된 시그니처를 따르도록 이 이벤트 처리기에서 호출할 수 있는 메서드입니다. AlarmEventHandler는 대리자의 형식 이름입니다. AlarmEventArgs는 이벤트 데이터의 기본 클래스인 EventArgs에서 파생되며 경고 이벤트 데이터를 보유합니다.
Imports System
Namespace DesignLibrary
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
Public Class AlarmEventArgs
Inherits EventArgs
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class AlarmEventArgs : EventArgs {}
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
}
using namespace System;
namespace DesignLibrary
{
public ref class AlarmEventArgs : public EventArgs {};
public delegate void AlarmEventHandler(
Object^ sender, AlarmEventArgs^ e);
}