OverrideとShadow
OverrideもShadowも、親Classて定義されているメソッドの内容を
子クラスで変更する際に使用されるが、挙動は少し事なる。
■Shadow
Public Class class1
Sub test()
MessageBox.Show("Class1")
End Sub
End Class
Public Class class2 Inherits class1
Shadows Sub Test()
MessageBox.Show("Class2")
End Sub
End Class
Sub a()
Dim c1 As New class1
Dim c2 As New class2
Dim c3 As class1 = c2
c1.test() ’---Class1
c2.Test() ’---Class2
c3.test() ’---Class1
End Sub
上記において、c3.TestではClass2のインスタンスをセットしているにも関わらず
"Class1"が表示される。
Shadowの場合、インスタンスではなくClassのメソッドが実行される。
逆に、インスタンスのメソッドが実行されるのが、Overrideである。
(*)ShadowはOverrideと違い、親Classの対象メソッドには何の記述も必要ない。
Overridableでないメソッドを子で書き換えたい場合はShadowが使える!