저는 C#을 처음 접했기 때문에 언어의 일부 기능을 이해하지 못하거나 뭔가를 이해하지 못했습니다. 나는 온라인에서 검색을했는데, 모든 예제는 하나의 클래스에서 모든 것을 찾았다. (즉, 이벤트가 트리거 될 때 실행되는 메서드뿐만 아니라 이벤트도 정의한다.) 이것은 내가 원하는 것이 아니다.이러한 종류의 이벤트 수신기 디자인은 어떻게 구현합니까?
제 시나리오의 경우 사용자 지정 매개 변수를 수락 할 수있는 수신기 메서드 인터페이스를 정의하고 싶습니다.이 메서드는 지침을 제공하는 자체 EventArgs가 될 수 있습니다. 차를 그 척 수 있습니다, 그래서이라는 방법이 있습니다
- 시작 (MyCustomParameters 파)
- 이 (MyCustomParameters 파)를 가속화
- 로 감속 (MyCustomParameters 파)를 내가 원하는
및 이러한 메소드의 실제 구현을 제공하는 클래스를 작성할 수 있습니다.
이 모든 것과는 완전히 별개로, 외부 프로세스를 기반으로 주기적으로 실행되는 단일 클래스가 있으며이 이벤트를 트리거해야합니다 (자동차가 시동을 걸고 가속 할 때 등).
그것은 내가 일하려고 노력하고있는 것의 기초 다. 그러나 지금까지 운이 없다. 또한 한 가지 후속 질문입니다. 내 청취자 구현 클래스가 주어진 호출로부터 어떤 종류의 상태를 유지할 필요가 있다면 그것을 어떻게하면 좋을까요 (예를 들어, Accelerate가 호출 될 때 호출 된 속도를 호출자에게 되돌릴 수 있기를 원한다고 말하면됩니다).
//your custom parameters class
public class MyCustomParameters
{
//whatever you want here...
}
//the event trigger
public class EventTrigger
{
//declaration of the delegate type
public delegate void AccelerationDelegate(MyCustomParameters parameters);
//declaration of the event
public event AccelerationDelegate Accelerate;
//the method you call to trigger the event
private void OnAccelerate(MyCustomParameters parameters)
{
//actual triggering of the events
if (Accelerate != null)
Accelerate(parameters);
}
}
//the listener
public class Listener
{
public Listener(EventTrigger trigger)
{
//the long way to subscribe to the event (to understand you create a delegate)
trigger.Accelerate += new EventTrigger.AccelerationDelegate(trigger_Accelerate);
//a shorter way to subscribe to the event which is equivalent to the statement above
trigger.Accelerate += trigger_Accelerate;
}
void trigger_Accelerate(MyCustomParameters parameters)
{
//implement event handling here
}
}
나는 그것이 도움이되기를 바랍니다 : - 이벤트 등 80 킬로미터)
여기
당신은 의존성 주입을 찾고 있다고 생각합니다. 구현 클래스, 구현의 인스턴스화를 관리하는 클래스, 구현의 비즈니스 로직을 처리하는 리스너 클래스가 필요합니다. 핸들러/리스너가 트리거 될 때 필요한 조치를 수행 할 수 있도록 인터페이스 메소드의 리턴 유형을 판별해야합니다. –
@Evan L 다른 요일에 DI에서 실제로 독서를 한 적이 있습니다. 멋지게 보이지만, 한 클래스에서 이벤트를 트리거하고 다른 이벤트에서 이벤트를 처리하기를 원한다면 이런 식으로 간단한 것입니다. 여기서 DI가 필요하다고 말하는 이유는 무엇입니까? – Grudge