【发布时间】:2013-12-20 20:47:24
【问题描述】:
我有两个函数可以处理相似但不同的数据。因此,有些变量在两者之间使用,有些则没有。
以下哪一个会更好?
在决定函数的函数中声明变量并将它们作为参数传递:
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。
谢谢!
【问题讨论】:
-
你能发布两个不同但相似的功能吗?我有一个关于如何更有效地整合这些内容的想法,但它高度依赖于细节,或者至少更容易以这种方式解释。
-
@JoelCoehoorn 很遗憾,我不能分享更多。
-
为什么在方法 1 中将 a、b 和 c 声明为 ByRef?如果您想在方法中更改它们,则无法在方法 2 中更改它们,因为您创建的本地实例一旦离开该方法就无法再访问。
-
哎呀,我不知道我为什么要这样写。在代码中,它们按预期编写为 ByVals。感谢您指出这一点!
标签: vb.net function arguments byref