2010-05-28 4 views
1

C# 4.0은 메소드에서 기본 매개 변수를 허용하여 매우 유용하고 유용한 것을 도입했습니다. 그러나 C# 3.0은 그렇지 않습니다. 따라서 "기본 매개 변수"를 시뮬레이트하려면 해당 인수 중 하나와 인수가없는 두 개의 메소드를 만들어야합니다. 내가 할 수있는 두 가지 방법이있다.기본 매개 변수의 이러한 모의 시뮬레이션간에 중요한 기계적 차이가 있습니까?

버전 A - 다른 방법

public string CutBetween(string str, string left, string right, bool inclusive) 
{ 
    return str.CutAfter(left, inclusive).CutBefore(right, inclusive); 
} 

public string CutBetween(string str, string left, string right) 
{ 
    return CutBetween(str, left, right, false); 
} 

버전 B 전화 - 복사 메소드 본문

public string CutBetween(string str, string left, string right, bool inclusive) 
{ 
    return str.CutAfter(left, inclusive).CutBefore(right, inclusive); 
} 

public string CutBetween(string str, string left, string right) 
{ 
    return str.CutAfter(left, false).CutBefore(right, false); 
} 

이들 사이의 진정한 차이가 있습니까? 이것은 최적화 나 리소스 사용 또는 어떤 것에 관한 질문이 아닙니다. (일부는 일관성을 유지하려는 일반적인 목표이지만) 한 가지 방법이나 다른 방법을 선택하는 데 중요한 영향을 미치지는 않는다고 생각합니다. 그러나 이 문제에 관해서는 현혹보다는 잘못 생각하는 것이 현명하다.

답변

4

유일한 차이점은 유지 관리의 차이입니다. 두 번째 버전은 본질적으로 코드 중복 형태이며, 구현을 변경해야 할 경우 더 많은 작업 (그리고 더 많은 테스트 실행)이 필요합니다.

그렇지 않으면 기본적으로 다른 모든면에서 동일합니다. 첫 번째 경우에는 호출 스택에 하나의 추가 메서드가있어서 성능이나 리소스 사용에 별다른 영향을 미치지 않습니다. 최적화 문제는 아닙니다).

동일한 메서드의 여러 오버로드가 필요할 때 나는 첫 번째 예제에서 수행 한 작업을 수행하는 경향이 있습니다. 여러 오버로드 된 메서드가 모두 동일한 "일반"메서드를 호출합니다.

+0

오, 유지 관리에 대한 좋은 점. 첫 번째 방법을 사용한다는 것은 한 지점에서 일을 변경해야한다는 것을 의미합니다. 스택에있는 하나의 추가 메소드는 낭비되는 시간의 큰 가능성만큼 큰 상처를주지는 않습니다. –

1

첫 번째 버전에서 어떤 이유로 든 CutAfter 또는 CutBefore 서명이 변경되면 두 번째 버전에서는 한 줄만 업데이트해야하지만 두 번째 버전에서는 여러 줄을 업데이트해야합니다.

1

동작에는 차이가 없지만 버전 B는 이 분명하지 않습니다. 기본값을 적용하면 분명히이됩니다. 미묘한 차이가 없는지 확인하려면 코드를주의 깊게 읽어야합니다. 실제 로직을 포함하는 하나의 "마스터"메소드를 통해 모든 기본값을 퍼널하는 것이 더 좋습니다. 또한 논리를 나중에 쉽게 변경할 수 있습니다. 한 곳에서만 수행하면됩니다.

관련 문제