2009-04-28 3 views
2

간단한 질문과 함께 간단한 질문 일지 모르지만 나는 그것이 무엇인지 알지 못합니다. 컴파일러가 왜 이런 식으로 할 수 있습니까?익명 메소드 시그니처 및 이벤트 핸들러에 대한 간단한 질문

button1.Click += MyDelegateMethod 

// snip 

// compile error, signature does not match the signature of System.EventHandler. 
private void MyDelegateMethod() 
{ 

} 

은 내가해야한다는 것을 기대 :

button1.Click += delegate { someFlag = true; }; 

내가 그러나이 작업을 수행 할 수 없습니다 (난 단지 .NET 2.0, 그래서 아무 lamdas하지만 동일한 개념을 사용할 수 있습니다) 내 익명 메소드를 다음과 같이 선언하십시오 :

delegate(object sender, EventArgs e) { someFlag = true; }; 

익명 메소드는 괜찮지 만 필자는 쓰지 않을 때 이해가되지 않습니다. 완전한 메소드 그 자체. 누군가?

답변

4

컴파일러는 익명의 대리자가 대리자를 클릭하는 것과 같은 형식이지만 이벤트 인수를 사용할 필요가 없다는 것을 알 수 있습니다.

실제 메서드를 지정하면 컴파일러에서 잘못된 서명이있는 대리자를 가리키고 있으므로 컴파일되지 않습니다.

+0

"컴파일러 매직"은 내가 생각한 것입니다. –

1

당신이 볼 수 있듯이 delegate() { ... }이 아니라 delegate { ... }이 아니므로 C#에서 작업 할 수 있습니다.

+0

예, 좋은 지적입니다. 나는 그것이 동일하다고 생각했다. 당신은 그들이 ~ umptions을 만드는 것에 대해 뭐라하는지 안다. –

관련 문제