.Net 이벤트 "패턴"규칙을 위반하는 이벤트 선언에서 사용자 정의 EventArgs 상속 클래스를 선언하고 사용하는 대신 일반 DataEventArgs<TData>
클래스를 사용하고 있습니까? 또는 어떤 상황에서는 나쁜 습관을 고려한 것입니까?사용자 정의 이벤트 데이터 클래스 대신 DataEventArgs <TData>을 사용하는 것이 좋습니다.
는 (그것은 당신에게 전송되는 데이터의 유형을 보여줍니다 있지만 이벤트 인수를 이름의 명명 규칙은, DataEventArgs<TData>
이벤트 이름을 생략 사용. 이벤트 이름을 사용하고 접미사 "EventArgs입니다"를 추가하는 것입니다.)
TData에 사용하는 클래스를 수정할 수 없다면 일반 DataEventArgs 클래스가 다른 속성 추가와 같이 확장을 위해 일종의 폐쇄라고 주장 할 수 있습니다.
긴 설명 :
나는 표준 이벤트 "패턴"대회가 thusly 히 일반 이벤트 핸들러 대리자를 사용하여 선언하는 것을 이해 일부 데이터를 포함하는 표준 대의원 이벤트를 선언 할 때 :
public event EventHandler<SomethingHappendEventArgs> SomethingHappend;
SomethingHappendEventArgs
이 라인을 따라 무언가로 선언 된 경우
public class SomethingHappendEventArgs : EventArgs
{
public SomeDataType Value { get; private set; }
public SomethingHappendEventArgs(SomeDataType data)
{
this.Value = data;
}
}
주위를 둘러 보았을 때 Microsoft.Practices.Prism.Events를 비롯한 일반 DataEventArgs 클래스를 제공하는 여러 Microsoft 네임 스페이스가 있음을 발견했습니다. 그러나 SomethingHappendEventArgs와 같은 사용자 지정 이벤트 데이터 클래스 대신 해당 이벤트를 사용하는 경우 권장 사항이나 규칙을 찾을 수 없습니다.
그래서, 내가 이벤트 데이터에 포함 할 데이터의 하나 조각이 오히려이 같은 이벤트를 선언하는 것보다, SomethingHappendEventArgs처럼, 사용자 정의 이벤트 데이터 클래스를 사용해야하는 어떤 이유가,하는 것이어야한다?
public class DataEventArgs<TData> : EventArgs
{
public TData Value { get; private set; }
public DataEventArgs(TData value)
{
this.Value = value;
}
}
게다가 @ Nicole의 포인터는이 답변에 나열 할 고려해야 할 몇 가지가 있습니다 : http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no/129613#129613 –