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

问题描述 投票:0回答:2

我正在用 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#中也这样做有什么问题吗?

c# vb6 vb6-migration
2个回答
3
投票

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.