2011-11-08 3 views

답변

3

복잡한 참조 값에서는 기본 매개 변수 값을 사용할 수 없습니다. 첫 번째 매개 변수는 프리미티브 이며 스택에 저장되고 값 으로 복사되기 때문에 작동합니다. 배열은 복잡한 참조 값이므로 매개 변수로 나타나기 전에 먼저 할당되어야합니다.

편집 :
@Henk Holterman의 의견이 잘 반영됩니다. 나는이 정보가 잘못되었거나 오해의 소지가 있으므로 스택이나 힙이 이것에 작용하는지 직접적으로 알지 못한다. 내가 알고있는 기본 기준은 primitives types 만 사용할 수 있다는 것입니다. this document에서

기본 값은 표현의 다음 유형 중 하나 여야합니다

  1. 상수 표현식;

  2. 새로운 ValType() 형식의 표현식입니다. 여기서 ValType은 열거 형이나 구조체와 같은 값인 값입니다.

  3. ValType이 유형 인 default 형식 (ValType)의 표현식입니다.

위의 2010 년 수정되었습니다 "프리미티브"목록 링크

은 "내장 된"유형이라고합니다. found here 일 수 있습니다.

+0

문자열도 유형을 참조하고 그들이 잘 기본값으로 사용할 수 있습니다. 그리고 스택은 실제로 여기서 역할을하지 않습니다. –

+0

@HenkHolterman : 충분합니다. 그것은 내가 누군가와 가진 대화에 보충 적이 었으며 나는 그것을 뒷받침 할만한 것을 찾을 수 없었습니다. 필자는 그것을 쓰러 뜨 렸으며 매개 변수가 프리미티브 (또는 그들이 2010 년에 내장 된 유형으로 호출 되었기 때문에)라는 진술을 뒷받침하는 링크를 제공했습니다. –

3

기본 매개 변수 값은 컴파일시 상수 여야하므로이를 수행 할 수 없습니다.

2

기본값으로 초기화 프로그램을 사용할 수 없습니다.

당신은 사용할 수 있습니다

private static void diagonalFill(int[,] a, 
     int[] fillType = null, 
     int[] diagFill = null) 
{ 
    if (fillType == null) 
    fillType = new int[] {0,-1}; 

    if (diagFill == null) 
    diagFill = new int[] {-1,1}; 

    ... 
} 
+0

물론이 솔루션은 매개 변수로 전달 될 옵션이 아닌 null에 의존합니다. – AndrewC