2011-02-15 2 views
1

두 개의 매개 변수를 받아들이는 메서드가 있는데 이제는 추가 매개 변수를 전달해야하지만이 메서드를 호출하는 다른 모든 코드는 세 번째 매개 변수를 전달하지 않을 수 있습니다. 아래의 은 못생긴 해킹이지만 과부하의 과정에 익숙하지 않고 .NET 2.0에 갇혀 있습니다. 이렇게 작동하는 동안 나는 도움을 줄 수는 없지만 잘못 생각합니다.2.0에서 C# 4.0 옵션 매개 변수를 수행하는 방법이 있습니까?

public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan) 
    { 
     AddPlanFunds(planNode, plan, -1); 
    } 
    public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan, int participantId) 
    { 
     planNode.PlanFunds = new CommonPlanFunds(); 

     // Add single class funds 
     AddSingleClassFunds(planNode.PlanFunds, plan); 

     // Add portfolios 
     AddPortfolios(planNode.PlanFunds, plan,participantId); 
    } 

과부하는 어떻게해야합니까?

감사합니다.

+1

C#의 선택적 매개 변수는 거의 쓸모 없거나 많이 제한된다는 점에 유의하십시오. 상수 여야합니다. String.Empty가 작동하지 않습니다. DateTime.MinValue/DateTime.MaxValue/Int32.MinValue/... 작동하지 않습니다. 나는 정확히 5 분 동안 그들을 사랑했습니다 :-) – xanatos

답변

6

코드는이 작업을 수행하는 표준 방법입니다. 못생긴 해킹이 아닙니다.

-1 대신 int?을 사용하고 null을 전달하는 것을 고려해야합니다.

You can create optional parameters in C# 2 to be called from C# 4, using attributes.

+0

사실, 마법 값을 사용하는 대신 nullable int를 사용하십시오. –

+0

+1, nullables 제안에 대한 좋은 호소. – Sapph

+1

실제 인코딩이 무엇인지에 관계없이 정의 된 상수 여야합니다.이 방식으로 미래의 표현이 변경 되더라도 모든 코드 조각이 비 가치 표현에 동의하게됩니다. – unholysampler

3

과부하가 이 아니고이 아닙니다. 이것은 이전 버전의 프레임 워크에서 선택적 매개 변수를 지원하지 않는 방식과 똑같습니다.

+1

[아마 가장 좋은 방법] (http://adammcraventech.wordpress.com/2010/04/20)/for-using-optional-and-named-parameters-in-c-net-4-0 /)를 사용합니다. –

0

오버로드가 작동하는 방식입니다.

더 좋은 방법이 있지만 ... 간단한 경우에는 나쁘게 보이지 않습니다.

0

솔직히 나는이 접근법에 아무런 문제가 없음을 알았습니다. 선택적 매개 변수가없는 환경에서 그 사용법은 유비 쿼터스라는 것을 알고 있습니다.

0

정확하게 C에서 이전의 4.0에서 처리하는 방법입니다. params int[] participantIds 경로를 시도해 볼 수는 있지만 둘 이상의 int를 제공하는 경우 여러 개를 받아 들일 수 있어야합니다.

0

이것은 당신이 (2.0, 당신이 언급 한 방법은 올바른 방법입니다)

public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan, [Optional] int participantId) 
{ 
.. 
} 

같은 선택적 매개 변수를 추가 할 수 있습니다 또는

public static void AddPlanFunds(ParticipantResultsPlan planNode, Plan plan, int participantId = -1) 
{ 
.. 
} 

전화 할 수있는 기본 값을 지정할 수 있습니다, 4.0 2 매개 변수 또는 3 매개 변수 중 하나를 사용하는 방법

+0

두 번째 줄은 C# 2에서 작동하지 않습니다. – SLaks

2

선택적 매개 변수에서 벗어나려고하면 NOT 자동 과부하 s를 사용하는 대신 컴파일시에 지정된 기본값을 가져 와서 자동으로 호출에 삽입합니다.

왜 이렇게 나쁜가요? 기본값을 변경하고 솔루션을 컴파일했지만 상응하는 솔루션이 다시 컴파일되지 않으므로 이전 기본값을 갖고 있다고 가정 해보십시오. 선택적 매개 변수는 용도가 있지만 COM 프로그래밍 영역에서는 더 많이 사용됩니다.

관련 문제