게시자 이벤트에 구독자로 '일반'메서드를 추가하고 대리자를 첨부하는 것이 왜 좋은지 이해하기가 어렵습니다. 예를 들어일반 구독자 메서드를 이벤트에 추가하는 것과 익명 이벤트 처리기를 추가하는 것의 차이점은 무엇입니까?
...
public class Caller
{
public string Name { get; set; }
public event EventHandler<RuedaEventArgs> MakeRuedaCall;
public virtual void OnMakeRuedaCall(RuedaEventArgs args) {
if (MakeRuedaCall != null) {
MakeRuedaCall(this, args);
}
}
}
이 내가 정의하고 이벤트를 발생 내 게시자 클래스입니다. 나는 또한 커스텀 이벤트 인수를 사용하고있다.
public class Salsera {
public Salsera(Caller caller) {
caller.MakeRuedaCall += MakeMovement;
}
public void MakeMovement(object source, RuedaEventArgs args) {
if (args.CallName == "Vacilala") {
Turn();
}
if (args.CallName == "Patin") {
MoveToOutside();
}
}
private void MoveToOutside() {
Console.WriteLine("Ladies move to the outside....");
}
private void Turn() {
Console.WriteLine("Ladies turn....");
}
}
이 클래스는 생성자의 이벤트 구독자로 메서드를 추가하는 클래스입니다.
가정하자 나는 다음이 다른 곳에서 ...
Caller matt = new Caller();
EventHandler<RuedaEventArgs> anonyMouseFunc = (sender, eventArgs) =>
{
switch (eventArgs.CallName) {
case "Patin":
Console.WriteLine("Adding a new subscriber for Patin");
break;
case "Vacilala":
Console.WriteLine("Adding a new subscriber for Vacilala");
break;
}
};
matt.MakeRuedaCall += anonyMouseFunc;
이 바보 같은 질문처럼 보이지만 당신은 왜 '정상적인'방법을 구독 할 수 있음을 경우 (가 위임 signiture 일치 가정) 죄송에 이벤트 및 익명 메소드를 이벤트에 대한 위임자로 사용합니다.
즉 public event EventHandler<RuedaEventArgs> MakeRuedaCall;
은 두 옵션을 모두 어떻게 처리합니까?
많은 감사,
'event'는 아무 것도 처리하지 않습니다. 컴파일러는 메소드 생성에 신경을 쓰고 그것을'event' 델리게이트에 등록합니다. 그래서'event'를 호출하면 메소드가 실행됩니다. – dcg
이름이없는 이벤트 처리기를 추가하거나 이름이없는 이벤트 처리기를 추가하는 것은 왜 다른 * 것이라고 생각하십니까? 방법의 이름의 존재 또는 부족이 사건 발생시 어떻게 처형 될 수 있는지에 영향을 미칩니 까? – Servy