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