シャドウとオーバーロードについて話すとき、VB.netが非常に奇妙であることは知っていましたが、これには完全に困惑しています。
次のようなモデルを使用しています。親クラス:
Public Class Base
Function F() As String
Return "F() in Base Class"
End Function
Function F(ByVal n As Integer) As String
Return "F(" + n.ToString() + ") in Base Class"
End Function
End Class
この:
Class Derived
Inherits Base
Shadows Function F() As String
Return "-"
End Function
End Class
以下を実行するとき:
Sub Main()
Dim parent As Base = New Base()
Dim child As Derived = New Derived()
Console.WriteLine(parent.F())
Console.WriteLine(parent.F(1))
Console.WriteLine("------------")
Console.WriteLine(child.F())
Console.WriteLine(child.F(1)) 'this should not compile, due to the shadow keyword.
Console.Read()
End Sub
IndexOutOfRangeException がスローされます。さらに、(派生クラスで) 変更する場合: 「派生クラスでの関数」を返す場合は「-」を返します。コンソールは文字 'u' を出力します。誰かがこれの理由を知っていますか?