2017-05-08 17 views
2

저는 C#에서 오래된 VB 응용 프로그램을 다시 작성하고 있습니다.이 응용 프로그램은 일종의 계산기입니다. 그래서 그것은 어떤 값을 취하는 일련의 서브 루틴들로 구성되어 있으며, 새로운 값들을 계산합니다 (중간 결과). 이것은 나중에 다른 계산에서 사용됩니다.VB에서 C#으로 변환, 서브 루틴의 값 저장

가이 작업을 수행하는 방법은 다음과 같이이다 :

int in = 4; 
Call routine(in, outFromRoutine1); 

Call routine2(outFromRoutine1, outFromRoutine2); 

VB6의 기본 참조로 패스, 그래서 나는이 같은 C#으로 동일한 기능을 수행 할 수 있습니다 :

int in = 4; 
int outFromRoutine2 = 0; 
Routine(in, ref outFromRoutine1); 

int outFromRoutine2 = 0; 
Routine2(outFromRoutine1, ref outFromRoutine2); 

그러나 내가 이것이 C#에서 이것을 수행하는 이상한 방법으로 간주된다면 어떻게 생각 하나? 이것은 일종의 이상한 VB 방식 일뿐입니다. C#에서도 이렇게하는 데 문제가 있습니까?

+1

기능이 더 정상입니다. '''var result = routine2 (routine1 (in))'''그러나 호출의 코드를 알지 못한다면, 이것은 정확하지 않을 수도 있습니다. –

+2

ByRef는 VB6 코드에서만 사용되었습니다. 따라서 가장 먼저 확인해야 할 것은 실제로 ref로 전달해야한다는 것입니다. 매우 자주 사용하지 않습니다. 또한 VS2017에서 사용할 수있는 새로운 C# v7 기능을 고려하면 변수를 선언 할 필요가 없도록 루틴 (in, out int outFromRoutine1)을 작성할 수 있습니다. –

답변

3

C#에서는 메서드의 매개 변수를 메서드의 출력으로 사용할 수 있도록 ref (매개 변수는 입력과 출력) 및 out (매개 변수는 출력 전용)을 제공합니다. 즉, 일반적으로 C#에서 값을 반환하려면 return 문을 사용하는 것이 가장 좋습니다. Visual Studio 2017에서 앞으로 나아갈 경우 단일 메서드에서 여러 값을 반환 할 수있는 C#의 새로운 기능을 사용할 수도 있습니다. 상기 패턴 VB6, VB.net 또는 C#으로 구현 될 수 있지만

https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/method-parameters

+0

이것이 왜 투표가 중단되었는지 확실하지 않습니다. 이것은 내게 올바른 일을하는 방법을 가리키고있다. (ref를 사용하여 변수를 수정하는 대신 앱을 옮겨서 값을 전달한다.) Out은 또한 C#을 명확하게 새롭게 생각하는 사람이 고려해야 할 좋은 점이다. "VB Way"를 고수하기를 원한다면 좋은 연습을해라. –

+0

고마워! 새로운 C# 기능이나 사용법에 대해서는 몰랐다. – Balle

0

, 그것은 이들 중 어느 관용적 아니다. 모든 3 개 언어는 가치를 반환하는 방법과 그렇지 않은 방법을 구별하며, 사람들은 적절한 방법을 사용하도록 권장합니다.

VB6은 기본적으로 byref를 사용하지만 대부분의 코드는 하위 대신 값을 반환하는 기능을 제공합니다.

.net (VB 및 C# 둘 다)에서 ref 및 out 변수는 일반적으로 자원을 초기화하거나 여러 값을 반환하는 데 적절하게 사용됩니다. 명명 된 튜플에 대한 지원으로 인해 여러 값을 반환하는 경우가 거의 없을 수 있습니다.