声明变量并将它们传递给两个函数之一,或者在每个函数中声明变量? (可能是VB.NET特定的)

时间:2013-12-20 20:47:24

标签: vb.net function arguments byref

我有两个处理类似但不同数据的函数。因此,在两者之间使用了一些变量,有些变量不是。

哪种更好的做法?

在函数中声明决定函数并将它们作为参数传递的变量:

Private Sub ProcessData(ByVal x)
    Dim a = 1, b = "a", c = new SomeObject(x)
    If condition Then
        ProcessDataA(x, a, b, c)
    Else
        ProcessDataB(x, a, b, c)
    End If
End Sub
Private Sub ProcessDataA(ByVal x, ByVal a, ByVal b, ByVal c)
    ' code
End Sub
Private Sub ProcessDataB(ByVal x, ByVal a, ByVal b, ByVal c)
    ' code
End Sub

或者不传递参数并只是实例化两次变量?:

Private Sub ProcessData(ByVal x)
    If condition Then
        ProcessDataA(x)
    Else
        ProcessDataB(x)
    End If
End Sub
Private Sub ProcessDataA(ByVal x)
    Dim a = 1, b = "a", c = new SomeObject(x)
    ' code
End Sub
Private Sub ProcessDataB(ByVal x)
    Dim a = 1, b = "a", c = new SomeObject(x)
    ' code
End Sub

一方面,第一种方法可以防止代码重复,但我不确定编译器/解释器如何处理这种情况,或者这种方法是否有一些我不知道的开销。

如果答案因语言/编译器而异,我特别好奇.NET框架或VB.NET。

谢谢!

3 个答案:

答案 0 :(得分:0)

如果变量实际上没有携带任何有用的值,那么在我看来,最好将它们保留在方法的本地。传入,意外值可能会导致错误吗?

答案 1 :(得分:0)

这取决于变量实例化的“昂贵”程度。如果对象的构造在性能或资源方面是昂贵的,那么创建它们一次并将它们传递给方法当然更好。
如果你想保持你的方法彼此独立并且构造不昂贵,那么在本地创建它们是一种良好而干净的方式 由于ProcessDataA和ProcessDataB都是私有的,因此您可以在以后轻松更改方法。

答案 2 :(得分:0)

abc始终与每个ProcessData方法具有相同的值而不是第一个选项时。这样就可以避免在程序中引入错误,例如,当其中一个变量必须改变一次时,你就会忘记这两个方法中的一个。

此外,根据您的示例代码,ab可以在您的班级中定义为常量。

尽量避免复制和粘贴。 "Don't repeat yourself"