Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 重载/重写重复的代码和方法_.net_Vb.net - Fatal编程技术网

.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

这是一个关于面向对象的一般问题,特别是在.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 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回答的方式是没有意义的,因为第二个论证影响了逻辑的中间部分,这是事后难以做到的。事实上,可能最常见的情况是,第一个重载不是不向第二个参数传递任何内容,而是传递一些默认值。