.net 重载/重写重复的代码和方法
这是一个关于面向对象的一般问题,特别是在.NET(或任何其他框架或语言)中重载函数的问题。我正在研究一个有大量重复代码的应用程序。例如,请查看以下功能:.net 重载/重写重复的代码和方法,.net,vb.net,.net,Vb.net,这是一个关于面向对象的一般问题,特别是在.NET(或任何其他框架或语言)中重载函数的问题。我正在研究一个有大量重复代码的应用程序。例如,请查看以下功能: Public Function Test(ByVal Test1 As String) //code that is specifically relevant to Test1 variable End Function Public Function Test (ByVal Test1 As String, ByVal Test2 A
Public Function Test(ByVal Test1 As String)
//code that is specifically relevant to Test1 variable
End Function
Public Function Test (ByVal Test1 As String, ByVal Test2 As String)
//code that is specifically relevant to Test1 variable
//code that is specifically relevant to Test2 variable
End Function
我认为最好的做法是将与Test1变量特别相关的代码放在一个单独的函数中,因为它在两个函数中都很常见。是这样吗?我一直认为重复代码是一个非常糟糕的主意。通常,如果可能,我会这样做:
Public Function Test(ByVal Test1 As String)
Test(Test1, Nothing)
End Function
Public Function Test (ByVal Test1 As String, ByVal Test2 As String)
' code that is specifically relevant to Test1 variable
If Test2 IsNot Nothing Then
' code that is specifically relevant to Test2 variable
End If
End Function
通常,如果可能,我会这样做:
Public Function Test(ByVal Test1 As String)
Test(Test1, Nothing)
End Function
Public Function Test (ByVal Test1 As String, ByVal Test2 As String)
' code that is specifically relevant to Test1 variable
If Test2 IsNot Nothing Then
' code that is specifically relevant to Test2 variable
End If
End Function
这并不是更好:
Public Function Test(ByVal Test1 As String)
//code that is specifically relevant to Test1 variable
End Function
Public Function Test (ByVal Test1 As String, ByVal Test2 As String)
Test(Test1)
//code that is specifically relevant to Test2 variable
End Function
理想情况下,重载应该是将传统功能添加到原始函数中,但保留其原始行为,以防在代码中的其他地方使用它。这并不更好:
Public Function Test(ByVal Test1 As String)
//code that is specifically relevant to Test1 variable
End Function
Public Function Test (ByVal Test1 As String, ByVal Test2 As String)
Test(Test1)
//code that is specifically relevant to Test2 variable
End Function
理想情况下,重载应该是在原始函数中添加传统功能,但保留其原始行为,以防在代码中的其他地方使用它。谢谢你的一针见血。答案的关键是:Test(Test1),即原始代码被重用+1。谢谢,谢谢你一针见血。答案的关键是:Test(Test1),即原始代码被重用+1。谢谢,谢谢你的回答。我同意你说的+1。我更喜欢Shiin Zu的回答,因为你的函数没有传递任何内容。谢谢。这两种方法都是很好的建议,但这取决于具体情况,哪种方法才有意义。我常说,在现实生活中,Shiin Zu回答的方式是没有意义的,因为第二个论证影响了逻辑的中间部分,这是事后难以做到的。事实上,可能最常见的情况是,第一个重载不是不向第二个参数传递任何内容,而是传递一些默认值。谢谢您的回答。我同意你说的+1。我更喜欢Shiin Zu的回答,因为你的函数没有传递任何内容。谢谢。这两种方法都是很好的建议,但这取决于具体情况,哪种方法才有意义。我常说,在现实生活中,Shiin Zu回答的方式是没有意义的,因为第二个论证影响了逻辑的中间部分,这是事后难以做到的。事实上,可能最常见的情况是,第一个重载不是不向第二个参数传递任何内容,而是传递一些默认值。