【发布时间】:2013-01-30 23:28:24
【问题描述】:
我正试图找出这种奇怪的行为。我有一个基类 (A),它有一个名为“M”的重载方法:一个用于整数,一个用于浮点数(在 VB.NET 上为单个)。
另一方面,我有第二个类 (B),它继承自 A,它以两种方式重载方法 M:一种用于数据类型 double,另一种用于对象数据类型。
问题是:我希望方法将每个函数用于其数据类型,但出于某种奇怪的原因,具有 Object 数据类型的方法会占用所有调用。为什么会这样?
我希望这个程序的输出是15,但实际上是4。
这是代码(VB.NET):
Module Module1
Public Class A
Public Function M(ByVal a As Integer) As Integer
Return 8
End Function
Public Function M(ByVal a As Single) As Integer
Return 4
End Function
End Class
Public Class B
Inherits A
Public Overloads Function M(ByVal a As Double) As Integer
Return 2
End Function
Public Overloads Function M(ByVal a As Object) As Integer
Return 1
End Function
End Class
Sub Main()
Dim a0 As Double = 1
Dim a1 As Single = 2
Dim a2 As Integer = 4
Dim a3 As Object = 8
Dim arre(4)
arre(0) = a0
arre(1) = a1
arre(2) = a2
arre(3) = a3
Dim b As New B
Dim suma% = 0
For i = 0 To 3
suma += b.M(arre(i))
Next i
Console.WriteLine(suma)
System.Threading.Thread.CurrentThread.Sleep(2000)
End Sub
End Module
【问题讨论】:
-
如果你这样做会发生什么:
Dim var as Double =7:b.M(var)? -
在这种情况下,它使用“Double”方法。谢谢!
标签: vb.net object inheritance overloading