2011-05-05 8 views
0

안녕하십니까?여러 유사한 방법으로 반복 코드 피하기 (C#)

저는 C#에서 매우 유사한 몇 가지 메소드 세트를 보유하고 있습니다. 그들은 모두에 내장 된 거의 동일한 패턴 :

ResultObjectType MethodX(...input parameters of various types...) 
{ 
    nesting preparation code here... 
    { 
    { 
     resultObject = ExternalClass.GetResultForMethodX(input parameters of MethodX); 
    } 
    } 
    nesting result processing code here ... 
    return resultObject; 
} 

반복/동일 부품 : ResultObjectType, 준비 코드, 결과 처리 코드.

다른 부분 : ExternalClass 메서드를 호출하여 입력 매개 변수 집합 (입력 매개 변수 개수, 유형)을 호출합니다.

중요 : 메소드 서명을 제어 할 수 없어 변경할 수 없습니다.

나는 이런 식으로 뭔가와 유사한 코드의 모든 블록을 반복하지 않도록 노력하고 있어요 : 지금까지 나는 단지 그것을 모든 매개 변수가 같은 알려진 유형이 경우이 방식으로 작동하도록 관리

ResultObjectType MethodX(...input parameters of various types...) 
{ 
    return UniversalMethod( 
        new ExternalMethodDelegate(ExternalClass.GetResultForMethodX), 
        input parameters of MethodX...); 
} 

ResultObjectType UniversalMethod (Delegate d, input parameters of various types...) 
{ 
    nesting preparation code... 
    { 
     { 
      resultObject = 
       (d as ExternalMethodDelegate)(same input parameters as above); 
     } 
    } 
    nesting result processing code... 
    return resultObject; 
} 

을 코딩 할 때. 일반 대리인과 함께이 문제를 해결하기위한 여러 시도가 있은 후에 나는 이것을 달성 할 수 없다고 생각하기 시작했습니다. 코드가 컴파일 되더라도 런타임에는 작동하지 않습니다. 어떤 사람? 도와 주셔서 미리 감사드립니다.

+0

사전 처리 코드와 후 처리 코드가 정확히 동일하고 입력 매개 변수 주위에 어떤 계산을 수행합니까? 모든 메서드의 입력 매개 변수가 형식 및 순서가 동일합니까> – aqwert

답변

2

여기에 일반적인 위임을 사용하는 예제입니다 :

int MethodY(int something, int other) 
{ 
    return UniversalMethod(() => GetResultForMethodY(something, other)); 
} 

string MethodX(string something) 
{ 
    return UniversalMethod(() => GetResultForMethodX(something)); 
} 

T UniversalMethod<T>(Func<T> fetcher) 
{ 
    T resultObject; 
    //nesting preparation code here... 
    { 
     resultObject = fetcher(); 
    } 
    //nesting result processing code here ... 
    return resultObject; 
} 

ResultObjectType 항상 다음 모든 T의를 제거 할 수 있습니다 동일합니다.

+0

이것은 내가 찾고있는 것입니다. 매우 고맙습니다. – Puzzled

0

반복/동일 부분 : ResultObjectType, 준비 코드, 결과 처리 코드.

가능한 한 격리 된 부품으로 만드십시오.

또 다른 접근법은 코드 생성입니다.

관련 문제