2012-04-26 2 views
2

몇 가지 메서드가있는 라이브러리가 있고 특정 오류가 발생하는 동안 호출자가 정의한 메서드를 호출하려고합니다. 이 메소드는 bool을 리턴해야합니다. 무슨 뜻입니까?나중에 메서드를 호출 할 수 있도록 메서드를 인수로 전달 하시겠습니까?

Sock sock = new Sock(); 
sock.OnSpecificError(theMethodToCall); 

오류가 발생하면 먼저 OnSpecificError가 설정되었는지 확인해야합니다. 있다면, 그것을 실행해야합니다. 메서드가 false를 반환하거나 OnSepcificError가 설정되지 않은 경우 예외가 throw됩니다.

이것은 대리인이 설계된 것처럼 보이지만, 어떤 이유로 든 실제로 수행중인 작업, 수행중인 작업, 진행중인 작업, 내가 어떻게 처리 할 것인지 생각할 수 없습니다. 나중에 실행하십시오. 현재이 방법을 다루는 방법은 어리 석고 복잡하기 때문에 어떤 도움을 주시면 감사하겠습니다.

편집 : 조금만 설명해주세요. sock.OnSpecificError (method)는 단순히 저장하지 만 실행할 수없는 메서드를 sock에 전달하는 데 사용됩니다. 그런 다음 아이디어는 나중에 하나, 양말은 다른 방법을 실행하는 동안, 오류가 나타나면, 그 방법을 실행해야합니다. 나중에 사용법을 유지하고 필요할 경우 실행하십시오.

답변

3

대리자로 시작하는 가장 쉬운 방법은 미리 정의 된 것을 사용하는 것입니다. 예를 들어 인수를 사용하지 않고 bool을 반환하는 대리자는 Func<bool>이됩니다. stringint을 사용하고 bool을 반환하는 대표자는 Func<string,int,bool> 등이됩니다.

이처럼 메소드를 정의 : 당신은이 같은 작은 방법을 인라인 람다을 사용할 수 있습니다

sock.OnSpecificError(CheckForErrors); 

private bool CheckForErrors() { 
    return errorCode.Equals("YES"); 
} 

:

void OnSpecificError(Func<bool> errorCheck) { 
    // Do your stuff... 
    var gotErrors = errorCheck(); 
    if (gotErrors) { 
     // Do something about it 
    } 
} 

이제이 같은 OnSpecificError를 호출 할 수 있습니다

sock.OnSpecificError(() => errorCode.Equals("YES")); 
+0

오케이, 생각합니다. 테스트 해 볼까요? 나는 그것을 가지고 있는지 확인하십시오. 그래서 Func <>은 사전 정의 된 델리게이트입니까? <>는 C#의 세계에서 정확히 무엇을 의미합니까? 나는 google <> – cost

+0

사실상 아니오, 이것은 내가 찾고있는 것이 아니기 때문에 Google Cringes 이후 좋은 답을 얻을 수 없었습니다. 내 대답에 대한 편집을 살펴보고 명확하게하려고 노력했습니다. – cost

+0

@cost'<>'는 * generic arguments *를위한 장소입니다. 'Func <>'은 사전 정의 된 일반 대리자 유형의 패밀리입니다. 하나 이상의 유형 인수를 제공하여 매개 변수 유형을 표시하고 위임자의 유형을 리턴하여이를 확장 할 수 있습니다. – dasblinkenlight

관련 문제