공통 이벤트 핸들러에 관련 클래스 전달

피터 M

기본 클래스에서 파생 된 여러 클래스가 있습니다.

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'키워드 사용과 캐스팅 비교 참조 )

15ee8f99-57ff-4f92-890c-b56153

이것이 당신이 찾고있는 것입니까?

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

클릭 핸들러에서 이벤트 전파 중지

분류에서Dev

이벤트 핸들러에 이벤트 전달

분류에서Dev

Vue.js는 바운드 데이터를 클릭 이벤트 핸들러에 전달합니다.

분류에서Dev

선택기와 관련된 변수를 여러 jQuery 이벤트에 전달

분류에서Dev

이벤트 및 컨텍스트를 전달하는 Pytest 람다 핸들러

분류에서Dev

호버 이벤트 핸들러에 클래스 추가

분류에서Dev

관련 모델에 유효성 검사 컨텍스트 전달

분류에서Dev

Ember 핸들 바 도우미의 이벤트 핸들러에 인수 전달

분류에서Dev

Ember 핸들 바 도우미의 이벤트 핸들러에 인수 전달

분류에서Dev

Mootools 클래스 : 이벤트 핸들러에서 클래스 메소드 호출

분류에서Dev

HTML에서 다중 인수 onMouseover 이벤트 핸들러 전달

분류에서Dev

새 양식에서 이벤트 핸들러로 변수 전달

분류에서Dev

이벤트 핸들러에 콜백 전달

분류에서Dev

동적으로 추가 된 이벤트 핸들러는 자바 스크립트에서 이전 이벤트 핸들러를 비활성화합니다.

분류에서Dev

JavaFx 8에서 ParallelTransition의 이벤트 핸들러와 관련된 모션 문제

분류에서Dev

클래스 인스턴스에서 이벤트 핸들러 가져 오기

분류에서Dev

이벤트 핸들러 및 클래스 인스턴스 추가

분류에서Dev

React 클릭 핸들러를 자식 컴포넌트에 전달하기

분류에서Dev

셰이프를 통해 마우스 클릭 이벤트 전달

분류에서Dev

Javascript 클래스 생성자 내에서 jQuery 이벤트 핸들러 사용

분류에서Dev

이벤트 트리거 / 버튼 클릭을 통해 자바 스크립트 함수에 매개 변수 전달

분류에서Dev

이벤트 핸들러는 이벤트 소스에 작용

분류에서Dev

주석이 달린 클래스와 관련된 HibernateUtil 문제

분류에서Dev

다른 클래스를 통해 클래스에 객체 전달

분류에서Dev

PropertyChanged 이벤트를 클래스간에 어떻게 전달합니까?

분류에서Dev

jQuery없이 지시어 핸들러에 모의 DOM 이벤트 전달

분류에서Dev

Android : 스레드가 핸들러에 데이터를 전달하지 않음

분류에서Dev

"this"가있는 JavaScript 클래스 및 이벤트 핸들러

분류에서Dev

React-소품으로 전달 된 클릭 핸들러에서 컴포넌트 소품 전달

Related 관련 기사

  1. 1

    클릭 핸들러에서 이벤트 전파 중지

  2. 2

    이벤트 핸들러에 이벤트 전달

  3. 3

    Vue.js는 바운드 데이터를 클릭 이벤트 핸들러에 전달합니다.

  4. 4

    선택기와 관련된 변수를 여러 jQuery 이벤트에 전달

  5. 5

    이벤트 및 컨텍스트를 전달하는 Pytest 람다 핸들러

  6. 6

    호버 이벤트 핸들러에 클래스 추가

  7. 7

    관련 모델에 유효성 검사 컨텍스트 전달

  8. 8

    Ember 핸들 바 도우미의 이벤트 핸들러에 인수 전달

  9. 9

    Ember 핸들 바 도우미의 이벤트 핸들러에 인수 전달

  10. 10

    Mootools 클래스 : 이벤트 핸들러에서 클래스 메소드 호출

  11. 11

    HTML에서 다중 인수 onMouseover 이벤트 핸들러 전달

  12. 12

    새 양식에서 이벤트 핸들러로 변수 전달

  13. 13

    이벤트 핸들러에 콜백 전달

  14. 14

    동적으로 추가 된 이벤트 핸들러는 자바 스크립트에서 이전 이벤트 핸들러를 비활성화합니다.

  15. 15

    JavaFx 8에서 ParallelTransition의 이벤트 핸들러와 관련된 모션 문제

  16. 16

    클래스 인스턴스에서 이벤트 핸들러 가져 오기

  17. 17

    이벤트 핸들러 및 클래스 인스턴스 추가

  18. 18

    React 클릭 핸들러를 자식 컴포넌트에 전달하기

  19. 19

    셰이프를 통해 마우스 클릭 이벤트 전달

  20. 20

    Javascript 클래스 생성자 내에서 jQuery 이벤트 핸들러 사용

  21. 21

    이벤트 트리거 / 버튼 클릭을 통해 자바 스크립트 함수에 매개 변수 전달

  22. 22

    이벤트 핸들러는 이벤트 소스에 작용

  23. 23

    주석이 달린 클래스와 관련된 HibernateUtil 문제

  24. 24

    다른 클래스를 통해 클래스에 객체 전달

  25. 25

    PropertyChanged 이벤트를 클래스간에 어떻게 전달합니까?

  26. 26

    jQuery없이 지시어 핸들러에 모의 DOM 이벤트 전달

  27. 27

    Android : 스레드가 핸들러에 데이터를 전달하지 않음

  28. 28

    "this"가있는 JavaScript 클래스 및 이벤트 핸들러

  29. 29

    React-소품으로 전달 된 클릭 핸들러에서 컴포넌트 소품 전달

뜨겁다태그

보관