예. { add; remove; }
부분과 백업 위임 필드를 제거하고 당신은 황금거야하기 : 그것은
public event EventHandler UpdateErrorIcons;
의 그!
이 질문에 앞서 질문을 추가하기 만하면 자동 구현 버전의 이벤트가 속성과 일치하지 않는다고 생각하지 않았습니다. 개인적으로, 실제로 은 자동 구현 된 이벤트가 처음 시도한 방식대로 작동하는 경우을 선호합니다. 보다 일관성 있고 이벤트가 이 아닌이 위임 필드와 동일하다는 사실을 상기시키는 역할을합니다. 속성은 일반 필드와 동일하지 않습니다.
솔직히 사용자 정의 구문 첫 번째로에 대해 알고있는 경우가 드뭅니다. 많은 .NET 개발자는 자신의 add
및 remove
메서드를 전혀 구현할 수 없다는 단서가 없습니다.
업데이트 : 그냥 마음의 자신의 평화를 위해, 나는 Reflector를 사용하여 확인했다고 C# 4 이벤트의 기본 구현 (즉, 당신은 자동 실행 경로를 이동 할 때 생성됩니다 구현) 이 동일합니다 : 위 효과적으로 add
및 remove
통화를 직렬화 잠금 무료 동기화를 사용
private EventHandler _updateErrorIcons;
public event EventHandler UpdateErrorIcons
{
add
{
EventHandler current, original;
do
{
original = _updateErrorIcons;
EventHandler updated = (EventHandler)Delegate.Combine(original, value);
current = Interlocked.CompareExchange(ref _updateErrorIcons, updated, original);
}
while (current != original);
}
remove
{
// Same deal, only with Delegate.Remove instead of Delegate.Combine.
}
}
하는 것으로. 따라서 최신 C# 컴파일러를 사용하는 경우 add
/remove
자신을 까지 동기화 할 필요가 없습니다.
정말 재밌습니다. 대부분의 사람들은 확장 코드에 대해 전혀 듣지 못했습니다. – Andrey
예, 사람들이 이것을 보았지만 개인적으로 이것을 사용하지는 않았지만 나중에 컴파일러에서 추가합니다. –