誰かがこの振る舞いを説明できますか? 私は2つのクラスを持っていFoo
ますBar
. その機能Bar
を継承Foo
してオーバーライドします。GetVar
Public Class Foo
Public myVar1 As Integer
Public Overridable Function GetVar() As Integer
Console.WriteLine("Foo.GetVar!()")
Return myVar1
End Function
End Class
Public Class Bar
Inherits Foo
Public myVar2 As Integer
Public Overrides Function GetVar() As Integer
Console.WriteLine("Bar.GetVar!()")
Return MyBase.GetVar() + myVar2
End Function
End Class
私のmain()
モジュールでは、次のことが起こります。
Sub Main()
Dim myBar As New Bar
myBar.myVar1 = 2
myBar.myVar2 = 2
Dim myFoo As Foo
myFoo = myBar
Console.WriteLine(myFoo.GetVar())
Console.ReadKey()
End Sub
出力は次のとおりです。
Bar.GetVar()!
Foo.GetVar()!
4
私には奇妙に思えます -myFoo
はタイプ のオブジェクトとして宣言されているので、呼び出すとの実装(outputting 2)が呼び出されるFoo
と思っていました- 明示的にダウンキャストせずに、実際に aであるという事実は「見えない」と思いましたその宣言による。なぜこうなった?myFoo.GetVar()
Foo
GetVar()
myFoo
Bar
Foo