다음을 통해 공유


이벤트 디자인

이벤트는 동작이 발생할 때 응용 프로그램 관련 코드가 실행될 수 있는 메커니즘입니다. 이벤트는 관련 동작이 발생하기 전(사전 이벤트) 또는 발생한 후(사후 이벤트)에 발생합니다. 예를 들어, 사용자가 창의 단추를 클릭하면 사후 이벤트가 발생되어 응용 프로그램 관련 메서드가 실행될 수 있습니다. 이벤트 처리기 대리자는 시스템에서 이벤트를 발생시킬 때 실행될 메서드에 바인딩됩니다. 이벤트가 발생되면 이벤트 처리기가 해당 이벤트에 추가되어 메서드를 호출할 수 있습니다. 이벤트는 이벤트 관련 데이터를 가질 수 있습니다. 예를 들어, mouse down 이벤트에는 화면 커서의 위치에 대한 데이터가 포함될 수 있습니다.

이벤트 처리 메서드의 시그니처와 이벤트 처리기 대리자의 시그니처는 같습니다. 이벤트 처리기 시그니처는 다음 규칙을 준수합니다.

  • 반환 형식은 Void입니다.

  • 첫 번째 매개 변수는 이름이 sender로 지정되고 Object 형식입니다. 이 매개 변수는 이벤트를 발생시킨 개체입니다.

  • 두 번째 매개 변수는 이름이 e로 지정되고 EventArgs 형식이거나 EventArgs의 파생 클래스입니다. 이 매개 변수는 이벤트 관련 데이터입니다.

  • 메서드는 정확히 두 개의 매개 변수를 사용합니다.

이벤트에 대한 자세한 내용은 이벤트 처리 및 발생을 참조하십시오.

이벤트에 대해 시작 또는 트리거라는 용어보다 발생이라는 용어를 사용합니다.

이벤트 처리기로 사용할 새 대리자를 수동으로 만드는 대신 System.EventHandler<T>를 사용합니다.

이 지침은 주로 새 기능 영역에 적용됩니다. 제네릭이 아닌 이벤트 처리기를 이미 사용하는 영역에서 해당 기능을 확장하는 경우 디자인의 일관성을 유지하기 위해 계속해서 제네릭이 아닌 이벤트 처리기를 사용할 수 있습니다.

라이브러리가 제네릭을 지원하지 않는 .NET Framework 버전을 대상으로 하는 경우에는 이 지침을 따를 수 없습니다.

이벤트에서 데이터를 이벤트 처리 메서드에 전달하지 않아도 된다는 것을 확실히 알 수 있는 경우가 아니면 System.EventArgs의 파생 클래스를 이벤트 인수로 사용할 수 있습니다. 이 경우 System.EventArgs 형식을 직접 사용할 수 있습니다.

파생 클래스 대신 EventArgs 인스턴스를 사용하는 이벤트를 정의하는 경우 이후 버전에서 이벤트에 데이터를 추가할 수 없습니다. 따라서 EventArgs의 빈 파생 클래스를 만드는 것이 더 좋습니다. 이렇게 하면 주요 변경 내용을 알리지 않고 이후 버전에서 이벤트에 데이터를 추가할 수 있습니다.

각 이벤트를 발생할 때 보호된 가상 메서드를 사용합니다. 이 방법은 봉인되지 않은 클래스의 비정적 이벤트에만 적용되며 구조체, 봉인된 클래스 또는 정적 이벤트에는 적용되지 않습니다.

이 지침을 따르면 파생 클래스에서 보호된 메서드를 재정의하여 기본 클래스 이벤트를 처리할 수 있습니다. 보호된 virtual(Visual Basic이 경우 Overridable) 메서드의 이름은 On 접두사를 사용한 이벤트 이름과 같아야 합니다. 예를 들어, "TimeChanged"라는 이름의 이벤트에 대한 보호된 가상 메서드 이름은 "OnTimeChanged"로 지정됩니다.

중요중요

보호된 가상 메서드를 재정의하는 파생 클래스는 기본 클래스 구현을 호출하지 않아도 됩니다.기본 클래스는 해당 구현이 호출되지 않아도 계속해서 올바르게 작동되어야 합니다.

이벤트를 발생시키는 보호된 메서드에 대해 이벤트 인수 클래스로 형식화된 매개 변수를 사용합니다. 해당 매개 변수의 이름은 e로 지정해야 합니다.

FontDialog 클래스는 Apply 이벤트를 발생시키는 다음과 같은 메서드를 제공합니다.

Protected Overridable Sub OnApply( ByVal e As EventArgs )
protected virtual void OnApply(EventArgs e);

비정적 이벤트를 발생시킬 때 전송자 매개 변수로 null(Visual Basic의 경우 Nothing)을 전달하지 않습니다.

정적 이벤트에서 sender 매개 변수는 null(Visual Basic의 경우 Nothing)이 되어야 합니다.

이벤트를 발생시킬 때 이벤트 데이터 매개 변수로 null(Visual Basic의 경우 Nothing)을 전달하지 않습니다.

이벤트 데이터가 없는 경우 null 대신 Empty를 전달합니다.

이벤트 처리 메서드에서 실행되는 임의의 코드를 준비합니다.

이벤트 처리기에서 throw된 처리되지 않은 예외로 인해 프로그램이 종료되는 것을 방지하기 위해 이벤트가 try-catch 블록에서 발생되는 경우 코드를 배치할 수 있습니다.

최종 사용자가 취소할 수 있는 이벤트를 발생시킬 수 있습니다. 이는 사전 이벤트에만 적용됩니다.

취소할 수 있는 이벤트를 디자인하는 경우 이벤트 데이터 개체 e의 기본 클래스로 EventArgs 대신 CancelEventArgs를 사용합니다.

Portions Copyright 2005 Microsoft Corporation. 모든 권리 보유.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.

참고 항목

개념

사용자 지정 이벤트 처리기 디자인

기타 리소스

멤버 디자인 지침

클래스 라이브러리 개발을 위한 디자인 지침