예를 들어이 컴파일러 경고가 표시됩니다.
'Company.SomeControl.SearchClick'이벤트는 사용되지 않습니다.
그러나 주석을 달면이 이벤트를 사용하려는 XAML 페이지에 대한 20 개의 새로운 경고가 발생하기 때문에 사용된다는 것을 알고 있습니다!
무엇을 제공합니까? 이 경고를 제거하는 트릭이 있습니까?
답변:
이것은 경고 67로 보이 므로 다음을 사용하여 억제 할 수 있습니다.
#pragma warning disable 67
다음을 사용하여 가능한 한 빨리 (이벤트 선언 후) 복원하는 것을 잊지 마십시오.
#pragma warning restore 67
그러나 다시 확인 하고 이벤트를 구독 하는 것이 아니라 어딘가에서 이벤트를 제기 하고 있는지 확인 합니다. 컴파일러 가 이벤트를 주석 처리 할 때 20 개의 오류 가 아니라 20 개의 경고를 내 보낸다는 사실 도 의심 스럽습니다.
이 경고와 특히 인터페이스에 적용되는 방법에 대한 흥미로운 기사 도 있습니다. "사용하지 않는"이벤트를 처리하는 방법에 대한 좋은 제안이 있습니다. 중요한 부분은 다음과 같습니다.
정답은 이벤트에서 기대하는 바를 명시하는 것입니다.이 경우에는 아무것도 아닙니다.
public event EventHandler Unimportant { add { } remove { } }
이렇게하면 경고는 물론 일반 이벤트의 추가 컴파일러 생성 구현이 표시되지 않습니다. 그리고 또 다른 추가적인 이점으로, 이것은 아무것도하지 않는 구현이 실제로 최상의 구현인지에 대해 생각하게합니다. 예를 들어 이벤트가 지원되지 않기 때문에 그다지 중요하지 않아서 기능에 의존하는 클라이언트가 이벤트없이 실패 할 가능성이있는 경우 지원 부족을 명시 적으로 표시하고 빠르게 실패 할 수 있습니다. 예외:
public event EventHandler Unsupported { add { throw new NotSupportedException(); } remove { } }
물론 기능의 일부없이 유용하게 구현할 수있는 인터페이스는 인터페이스가 최적으로 응집되지 않고 별도의 인터페이스로 분할되어야 함을 나타내는 경우가 있습니다.
인터페이스에서 이벤트를 구현해야하는 경우 구현에 필요하지 않은 경우 경고를 피하기 위해 다음을 수행 할 수 있습니다.
public event EventHandler CanExecuteChanged { add{} remove{} }
if(OnCompleteOpenEvent != null) OnCompleteOpenEvent();
"OnCompleteEvent가 현재 컨텍스트에 존재하지 않습니다"라고 표시됩니다.
두 번째로 좋은 방법은 누군가가 구독을 시도하면 예외를 발생시켜 이벤트가 지원되지 않음을 명확하게 알리는 imho입니다.
public event RoutedEventHandler SearchClick
{
add { throw new NotSupportedException(); }
remove { throw new NotSupportedException(); }
}
이에 대한 변형으로 add
및 remove
메서드를 비워 두어 이벤트에 대한 구독을 자동으로 무시할 수도 있습니다.
가장 좋은 해결책은 코드를 리팩토링하는 것입니다. 가능하면 이벤트 선언을 구현 자에게 가져 오는 것입니다.
최후의 수단으로 다음과 같이 경고를 비활성화 할 수도 있습니다.
#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67
또는 <NoWarn>67</NoWarn>
프로젝트에 추가 할 수 있습니다.
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<NoWarn>67</NoWarn>
</PropertyGroup>