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が使える!