2011-07-26 3 views
15

미안하지만, 나는 C#으로 이전하는 Vb.net의 늙은 사람이다. postAsync 메서드가 (이 경우) 활성화 될 때 보이는 코드 조각이 있습니다. 난 그냥 돈 (다음과 같이) t이 코드가 무엇을하고 있는지 이해 : -+ = (o, arg) => 실제로 달성하고있는 것은 무엇입니까?

app.PostCompleted += 
    (o, args) => 
    { 
     if (args.Error == null) 
     { 
      MessageBox.Show("Picture posted to wall successfully."); 
     } 
     else 
     { 
      MessageBox.Show(args.Error.Message); 
     } 
    }; 

사람이 설명 할 수 있다면 무엇을 + = (O, 인수) =이> 실제로 acheiving되어 정말 greatful 것 .. ..

미리 감사드립니다. Tim

답변

26

(o,args) =>oargs이라는 두 개의 매개 변수를 사용하는 람다 식을 정의합니다. 이러한 매개 변수의 유형은 PostCompleted 유형에 따라 추론됩니다 (이 EventHandler 인 경우 각각 ObjectEventArgs 유형). 표현의 본문은 => 다음에옵니다.

결과가 PostCompleted의 처리기로 추가되었습니다.

app.PostCompleted += delegate(object o, EventArgs args) 
{ 
    // ... 
}; 

을위한 속기이다 : 이와 같이

, 그것은 쓰기 덜 자세한 방법

void YourHandler(object o, EventArgs args) 
{ 
    // ... 
} 

// ... 

app.PostCompleted += YourHandler; 
+8

그 자체는'app.PostCompleted + = 새로운 EventHandler (YourHandler);'의 줄임말입니다. – Shibumi

+0

"new EventHandler"가 없어도됩니다. C# 컴파일러는 사용할 델리게이트를 충분히 추론 할만큼 똑똑합니다. 그래서 짧은 단축키는'app.PostCompleted + = YourHandler;' – Sung

+4

@Sung 나는 그것이 그가 말한 것과 정확히 같다고 생각한다. –

8

이는 람다 식을 사용하는 PostCompleted 이벤트에 대한 추가 처리기입니다.

app.PostCompleted += MyHandler; 

    // ... 

    private void MyHandler(object sender, EventArgs e) { 
     // ... 
    } 

과 유사하지만 람다 식을 사용할 때 쉽게 처리기를 분리 할 수 ​​없습니다.

5

그것은 POST 완료 이벤트에 대한 이벤트 핸들러를 정의하는 대리인을위한 속기이다 :

app.PostCompleted += delegate(object o, EventArgs args) { 
    // ... 
}; 

도 참조하십시오. Anonymous Methods.

3

PostCompleted이 이벤트라고 가정하면 기본적으로 람다 표기법을 사용하여 이벤트 처리기를 만듭니다.

app.PostCompleted += delegate (o, args) 
{ 
    if (args.Error == null) 
    { 
     MessageBox.Show("Picture posted to wall successfully."); 
    } 
    else 
    { 
     MessageBox.Show(args.Error.Message); 
    } 
}; 
2

(o,args) => 부분 익명 함수 인 lambda expression이다 : 냈다

이 코드는 동일하다.

+= 부분은 이벤트가 발생할 때 호출 할 람다 식을 할당합니다.

+0

MSDN 링크의 Thnaks ..... –

3

vb.net 상당 같을 것이다 :

AddHandler app.PostCompleted, Function(o, args) 
     ''# ... 
    End Function 

이 비주얼 스튜디오 2010/닷넷 4가 필요합니다,하지만 C# 코드 2008/닷넷 3.5 Visual Studio를 다시 작동합니다.

하지만 부분적으로 만 해당됩니다. C#에서는 한 곳에서 이벤트 처리기로 메서드를 정의하는 방법입니다. VB에서.넷, 당신은 Handles 키워드를 사용할 수 있습니다, 그래서 실제 동등한 더 다음과 같습니다

Public Sub App_PostCompleted(ByVal Sender as Object, ByVall e As EventArgs) Handles app.PostCompleted 
    ''# 
End Sub 

을하지만, 심지어 당신이 방법에 이름을주고 어디에서 호출 할 수 있기 때문에, 완전히 동일하지입니다. C# 코드 (및이를 호출하는 유일한 방법)에 대한 유일한 참조는 이벤트 구독을 통한 것입니다.

관련 문제