2014-10-03 7 views
0

비 사전 신고 의무 변수 I는이 같은 서명 메소드 호출더미 밖으로

public int GetStuff(String a, Object b) { ... } 

과 내가 어떤 식 으로든 B을 취급하지 않습니다 알고, 나는 그것을 호출 할 수 있습니다 다음과 같은 방법 :

int out = GetStuff("bzzz", null) { ... } 

를 사용하여 "가짜"입력. 내 질문은 거기에 출력 매개 변수에 상응하는 그래서 만약 내가 어쨌든 그것을 사용하지 않아도 미리 그것을 선언하지 않아도됩니다. 필요가 없다 더미를 증명하기 위해

Object output; 
DoStuff("pling", out b) { ... } 

하지만 난 결코 출력을 사용하지 않고있어 이후로, 내가 좋아하는 것 :

public void DoStuff(String a, out Object b) { ... } 

아래의 예는 너무 같은 두 개의 라인을 전화하라고 요구 미리 선언해야한다. 가능한가?

+5

1)과 같은 하나의 String 매개 변수를 받아들이는 방법의 과부하를 만들 수 없습니다, 방법의 설계에 뭔가 문제가있다. 2) C# 6이 조금 도움이 될 것입니다. (적어도 내부에는 그다지 많지 않습니다.) –

+0

@DavidPilkington 나는 네가 어떻게 생겼는지 안다. 이 특별한 경우에는 방법에 문제가 없습니다. 가져온 레코드 수를 반환하는 데 사용됩니다. 지금은 한 번에 하나씩 하나씩 가져 오기위한 테스트를 작성하고 있습니다. 그래서 출력은 항상 1과 같습니다. 나는 외계인의 사전 선언을 합리화하기를 희망했습니다. –

+1

재개시 : 지금까지는 아무 이유도 없습니다. C# 6에서 변경된 사항이 있더라도 실제로 업데이트 된 솔루션을 제공하려는 경우 - 연결된 복제본에 새로운 대답을 추가하십시오. (내가 2 가지 질문의 차이를 완전히 놓치지 않는다면). –

답변

5

짧은 대답 : 아니오. 나는 C# 6에 대해 확신하지 못한다. 다른 사람들이 말하는 것처럼 (나는 여전히 C# 4를 고수하고있다.)하지만 스펙대로이다. 여러 가지 방법으로 우회 할 수 있습니다. 한 가지 대안이 여기에 나와 있습니다.

메소드의 두 번째 매개 변수를 거의 사용하지 않으므로 (OR) 절대로 안됩니다. 왜 아웃을 사용하지 않는 경우

public void DoStuff(String a) { ... } 

public void DoStuff(String a, out Object b) { ... } 
+0

out 매개 변수의 선 선언에 현재 사용 된 행을 건너 뛸 수 있는지 궁금했습니다. 전체적인 방법을 쓰는 것은 실제로 그 일에 맞설 것이다. 나는 순수 학문적 호기심을 요구하고있다. –

+0

@KonradViltersten, 짧은 답변 : NO. 나는 C# 6에 대해 확신하지 못한다. 다른 사람들이 말하는 것처럼 (나는 여전히 C# 4를 고수하고있다.)하지만 스펙대로이다. 당신은 여러 가지 방법으로, 하나의 대안은 내 대답에 표시됩니다 무시할 수 있습니다. – Rahul

+0

가난하고 게으른 작은 나에게 너무 나쁘다. 답장의 맨 위에 짧은 답을 적어주세요. 답으로 기꺼이 받아 들일 것입니다. 고마워, 친구. –