2010-03-27 8 views
2

내가있을 때 위임 (1), (2) 내가 직접의 경우처럼 익명 methods.But 가리키는 대리자를 instatntiate하지 않았다위한위임 인스턴스화 -Clarification

public delegate void PrintMe(); 

(1) 
PrintMe a = delegate() { MessageBox.Show("Hello"); }; 
a(); 

(2) 
PrintMe b =() => { MessageBox.Show("Hello"); }; 
b(); 

(3) 
PrintMe c = new PrintMe(HelpMe); 
c(); 

static void HelpMe() 
{ 
    MessageBox.Show("Help Me"); 
} 

등 (3) 내가 대리인을 instatntiate하고 정적 method.for 사건 (3)을 전달할 수 있습니다 내가 PrintMe c= HelpMe(); ?처럼 선언 할 수 없습니다. (1)과 (2) 어떻게 작동합니까? 방법 그룹과 대표 사이의 암시 적 변환에

답변

1
PrintMe c = HelpMe; 
3

덕분에 당신은 괄호없이

(3) 
PrintMe c = HelpMe; 

즉, 말을 할 수

에서
+0

죄송합니다. 내가 얼마나 바보 야! – user274364

1

(1)과 (2) 컴파일러는 암시 적으로 람다 식을 변환 대의원.

당신은 다음 HelpMe에 대한 호출을 생성하고 c 해당 호출의 결과를 할당하는 컴파일러를 말하고있다

PrintMe c= HelpMe(); 

을하려고합니다. 대신, 여기

PrintMe c = HelpMe; 

할 수있는, 방법 그룹으로 알려진 것과 HelpMe occours 대리인의 경우로 변환 될 수있는 (이 과부하가있을 수 있기 때문에, 단지 방법은 아닙니다) 그룹의 적어도 하나의 메소드가 델리게이트에 적합합니다.