기본 클래스에서 파생 된 여러 클래스가 있습니다.
public interface IBase {}
public class Base : IBase {}
public class ClassA : Base, IBase {}
public class ClassB : Base, IBase {}
public class ClassC : Base, IBase {}
이제 이벤트 핸들러를 통해 이러한 각 클래스의 인스턴스를 공통 위치로 보내려고합니다. 그래서 "훌륭한 .. 각 인스턴스 Base
에서 하위 클래스 를 EventArgs
만들고이를 보낼 수있는 공통 메서드로 전달 하겠습니다"라고 생각 했습니다 ( 다음은 실제 코드가 아닙니다)
public interface IBase : IEventArgs
public class Base : EventArgs, IBase {}
public class ClassA : Base, IBase {}
public class ClassB : Base, IBase {}
public class ClassC : Base, IBase {}
EventHandler Update;
void SendClass(IEventArgs data)
{
Update?.Invoke(this,data);
}
..
SendClass(new ClassA());
SendClass(new ClassB());
SendClass(new ClassC());
IEventArgs
내 상상의 산물 인 것만 빼면 . 그래서 이것은 할 수 없습니다.
유일하게 유효한 해결책은 Send
보내려는 각 클래스에 대한 세관 방법 을 정의하는 것 같습니다 . 예 :
void SendClassA(ClassA data)
{
Update?.Invoke(this,data);
}
void SendClassB(ClassB data)
{
Update?.Invoke(this,data);
}
void SendClassC(ClassC data)
{
Update?.Invoke(this,data);
}
이것이 작동하는 동안 기본적으로 매우 간단한 방법을 여러 번 반복하므로 나쁜 코드 냄새가납니다.
상상에서 내가 원하는 것을 달성하는 또 다른 디자인이 IEventArgs
있습니까?
여러 번의 Up and Down 캐스팅으로 원하는 것을 얻을 수 있었지만,이 역시 나에게 나쁜 느낌을줍니다 ( CLR에서 'as'키워드 사용과 캐스팅 비교 참조 )
이것이 당신이 찾고있는 것입니까?
public class BaseEventArgs : EventArgs {
public IBase Data;
}
public event EventHandler<BaseEventArgs> Update;
void SendData(IBase data)
{
Update?.Invoke(this, new BaseEventArgs { Data = data } );
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다