다음을 통해 공유


적절한 경우 이벤트를 사용하십시오.

업데이트: 2007년 11월

TypeName

UseEventsWhereAppropriate

CheckId

CA1030

범주

Microsoft.Design

변경 수준

주요 변경 아님

원인

public, protected 또는 private 메서드 이름이 다음 중 하나로 시작합니다.

  • AddOn

  • RemoveOn

  • Fire

  • Raise

규칙 설명

이 규칙에서는 보통 이벤트에 사용되는 이름을 갖는 메서드를 찾아냅니다. 이벤트는 관찰자 또는 게시-등록 디자인 패턴을 따르며 한 개체의 상태 변경을 다른 개체에 전달해야 하는 경우 사용됩니다. 명확하게 정의된 상태 변경에 대한 응답으로 메서드를 호출할 경우 이 메서드는 이벤트 처리기에서 호출해야 합니다. 메서드를 호출하는 개체는 메서드를 직접 호출하는 대신 이벤트를 발생시켜야 합니다.

단추를 클릭하는 등의 사용자 작업으로 인해 일부 코드가 실행되는 사용자 인터페이스 응용 프로그램에서는 몇 가지 공통적인 이벤트 예를 볼 수 있습니다. .NET Framework 이벤트 모델은 사용자 인터페이스에 제한되지 않고, 상태 변경을 하나 이상의 개체에 전달해야 하는 모든 상황에서 사용해야 합니다.

위반 문제를 해결하는 방법

개체의 상태가 변경될 때 메서드가 호출되면 .NET Framework 이벤트 모델을 사용하도록 디자인을 변경해야 합니다.

경고를 표시하지 않는 경우

메서드가 .NET Framework 이벤트 모델에서 작동하지 않으면 이 규칙에서 경고를 표시하지 않습니다.

예제

다음 예제에서는 대리자를 호출하여 상태 변경(이 경우 해당 선언 형식인 Book이 닫혀 있음)을 전달하려고 하는 메서드를 보여 줍니다.

using System;

namespace Samples
{    
    public delegate void ClosedCallback(Book book);

        public class Book    
    {         
        private ClosedCallback _ClosedCallback;

             // Violates this rule
             public void AddOnClosed(ClosedCallback callback)
             {
                  _ClosedCallback = callback;
             }

         public void Close()
         {
              _ClosedCallback(this);
         }
    }
}

다음 클래스는 .NET Framework 이벤트 모델로 변경하여 위의 예제에 발생한 문제를 해결합니다.