我正在用 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# 提供 ref(参数是输入和输出)和 out(参数仅是输出),允许您使用方法的参数作为方法的输出。也就是说,一般来说,在 C# 中使用 return 语句返回值被认为是最佳实践。如果您正在使用 Visual Studio 2017,您还可以使用 C# 的新功能,该功能允许您从单个方法返回多个值。
虽然上述模式可以在 VB6、VB.net 或 C# 中实现,但它在其中任何一个中都不是惯用的。所有 3 种语言都认识到返回值的方法和不返回值的方法之间的区别,并且鼓励人们使用适当的方法。
虽然 VB6 默认使用 byref,但您仍然会发现大多数代码使用函数来返回值而不是 subs。
在 .net(VB 和 C#)中,ref 和 out var 通常适当地用于初始化资源或返回多个值。由于支持命名元组,返回多个值可能很快就会变得不那么常见。