从VB转换为C#,存储子程序中的值

时间:2017-05-08 01:25:29

标签: c# vb6 vb6-migration

我正在用C#重写一个旧的VB应用程序,这个应用程序是某种计算器。所以它由一系列带有一些值的子程序组成,并计算一些新的值(中间结果),后来在其他一些计算中使用。

他们这样做的方式是这样的:

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#中这样做也有问题吗?

2 个答案:

答案 0 :(得分:3)

C#提供ref(参数是输入和输出)和输出(仅输出参数),允许您将方法的参数用作方法的输出。也就是说,一般来说,最好使用return语句来返回C#中的值。如果您正在使用Visual Studio 2017,您还可以使用C#的新功能,它允许您从单个方法返回多个值。

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

答案 1 :(得分:0)

虽然上述模式可以在VB6,VB.net或C#中实现,但它们中的任何一个都不是惯用的。所有3种语言都认识到返回值的方法与不返回的方法之间的区别,并鼓励人们使用适当的方法。

虽然VB6默认为byref,但您仍然会发现大多数代码都使用函数来返回值而不是subs。

在.net(VB和C#)中,ref和out vars通常用于初始化资源或返回多个值。由于支持命名元组,返回多个值可能很快就会变得不常见。