私はこの奇妙な行動を理解しようとしています。「M」と呼ばれるオーバーロードされたメソッドを持つ基本クラス (A) があります。1 つは整数用、もう 1 つは浮動小数点数 (VB.NET では単一) です。
一方、A から継承する 2 番目のクラス (B) があり、メソッド M を 2 つの方法でオーバーロードします。1 つは double データ型用、もう 1 つはオブジェクト データ型用です。
問題は、メソッドがそれぞれの関数をそのデータ型に使用することを期待しているのですが、何らかの奇妙な理由で、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