2017-12-14 5 views
2

제목에 모두 나와 있습니다. 다음과 같이 다른 함수를 인수로 취하는 함수를 작성하고 있습니다.인수를 인수로 전달하고 기본 인수를 설정하십시오.

void function(Action func) { } 

잘 작동합니다. 어떤 매개 변수없이 함수를 호출 할 수 있기를 원하므로 을 사용하면이 다른 함수의 인수로 사용되는 식으로 처리됩니다. 매개 변수를 설정할 수 있습니다 내가 기본 값을 알고

void function(int x = 0) { } 

그러나 나는 시도하는 경우 :

void function(Action func = anotherFunction) { } 

내가 'FUNC'에 대한 "기본 매개 변수 값을 내용의 오류가 컴파일 시간 상수를해야합니다 ". 기본 기능을 설정할 수 있습니까? 그렇다면 어떻게? 이것은 크로스 플랫폼 Xamarin Forms 모바일 응용 프로그램에서 사용되고 있으므로 크로스 플랫폼 기능이 필요합니다. 모든 함수는 void를 리턴하고 오직 하나의 인수만을 취합니다. 인수 기능을 사용 할 수

답변

3

뭔가

void function(Action func = default(Action)) { } 

FUNC 매개 변수는 선택 사양 일 것이지만, 기본값은 NULL 값을 가질 것 "제출"사용자가 클릭 한 후 호출되는있는 기능을 결정합니다. 참조 유형이고 상수가 될 수 없기 때문에 func가 이미 존재하는 기본 액션으로 설정되도록 허용 할 수 없다고 확신합니다.

는 여기에 몇 가지 more info on the default keyword

편집 : 당신 이 콜백을 호출하기 전에 항상해야하는 (NULL의 경우 'FUNC'가 설정되지 않은 경우, 당신은 확인 무언가를 할 수있는 방법을 원한다면 내 생각) 그럴 경우 다른 작업을 수행하십시오 (작업 또는 콜백을 지정할 수 있습니다).

EDIT2 : mjwills가 언급 한 바와 같이, 당신은 또한 void function(Action func = null) { }

할 수있는 당신이 선택하게 할 매개 변수가 구조체 인 경우 기본 키워드가 더 유용 할 것입니다.

+0

기본값 (동작)이 null이므로 아무런 이점이 없습니다. 둘 중 하나가 작동합니다 - Action이 선택적 매개 변수로 null로 설정 될 수 있다는 사실을 잊었습니다. – BassaForte

1

Chiris의 대답에 따라 코드에 anotherFunction을 설정하여 목표를 달성 할 수 있습니다. 예 :

void function(Action func = null) { 
    if(func == null) 
     func = anotherFunction; 
}