http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet10/vb6tonet10_02.html
C#/VB.NETの継承先のクラスで、継承元から継承したメソッドの動作を置き換えるためのキーワード。
オーバーライド(virtual/overridable)と似ているが、以下の点が異なる。
・オーバーライドされたメソッドは、『インスタンスの型』によって、呼び出されるメソッドが変化する
・new/Shadowsされたメソッドは、『インスタンスの参照に使っている変数の型』によって、呼び出されるメソッドが変化する
・new/Shadowsされたメソッドは、継承元のメソッドの引数・戻り値に関係なく、自由なオーバーロードが許される
具体的には、以下のコードによって示されるように動作する。
Private Sub Main()
Dim o1 As New Class1()
Dim o2 As New Class2()
o1.Test() ' Test in Class1 called
o2.Test() ' Test in Class2 called
Dim o3 As Class1 = New Class2()
o3.Test() ' Test in Class1 called ●ここがオーバーライドと違う。
End Sub
Public Class Class1
Public Sub Test()
Trace.WriteLine("Test in Class1 called")
End Sub
End Class
Public Class Class2
Inherits Class1
Public Shadows Sub Test()
Trace.WriteLine("Test in Class2 called")
End Sub
End Class