2012-06-19 3 views
2

이것이 왜 돌아 왔는지 5 궁금한 점은 기본 함수가 기본 매개 변수 1보다 우선 순위가 높다는 것입니다. 어떤 시체가 나에게 이것을 설명 할 수 있을까? 미리 감사드립니다.우선 순위 기본값 또는 다른 기능? (과부하)

static void Main(string[] args) 
{ 
     Console.WriteLine(add()); 

     Console.ReadLine(); 
} 



public static int add(int x=4,int y=5) 
{ 
     return x+y; 
} 

public static int add() 
{ 

     return 5; 

} 
+3

5를 반환하지 않으면 8을 반환합니다. –

+0

죄송합니다. :) – BlaShadow

+0

@antisanity - 3의 값이 메서드의 첫 번째 매개 변수로 전달되므로 8을 반환합니다. 따라서 매개 변수'x'는 3의 값을 가지며 두 번째 매개 변수는 기본값 5를 유지합니다. –

답변

3

이 문제는 C# 언어 사양을 살펴 봄으로써 만 대답 할 수 있다고 생각합니다. 없이 해당 인수

선택적 매개 변수가 매개 변수 목록

에게 에서 제거 : 제 7.5.3.2은 "더 나은"기능 멤버를 결정할 때 선택적 인수가 필요하지 않은 경우, 당신이 그들을 밖으로 던져 말한다

사실상이 두 기능을 동일하게 만듭니다. 그런 다음 두 가지 기능이 동등 할 때에 대해 다음과 타이 브레이커 규칙이 있습니다 :

그렇지 않으면 기본 인수는 다음 MQ 적어도 하나 개의 선택적 매개 변수를 대체 할 필요가있는 반면 MP의 모든 매개 변수는 해당 인수 이있는 경우 MP가 MQ보다 낫습니다.

즉, 기본 인수가없는 코드는 호출 한 것과 같습니다. 즉, 코드에서 보는 것처럼 말입니다.

0

제 경험상, 메서드가 오버로드되거나 기본 매개 변수를 사용합니다. 그것은 디자인 선택입니다, 비록 내가 직접 매개 변수화 된 것들 대신에 오버로드 된 메소드를 작성하고 있음을 발견했습니다.

이 경우 컴파일러는 호출 할 메소드를 결정해야하며 매개 변수가없는 메소드가 우선 순위를 갖습니다.

0

매개 변수없이 add() 메서드를 호출하여 5를 반환합니다. 컴파일러는 기본 매개 변수가있는 컴파일러를 기반으로 원하는 컴파일러를 어떻게 결정해야합니까? 그것은 하나를 골라야합니다. 이것이 작동하도록 설계된 방법입니다.

선택적 인수에 대한 자세한 내용을 보려면 에릭 리 퍼트 (Eric Lippert)의 시리즈를 읽어 보시기 바랍니다. here을 시작할 수 있습니다.