I haven't found a use for Shadows yet.
One difference is that if the method you are overriding / shadowing is called from the base class, if its overwritten the method in the sub class will be called, if its shadowed the base method will still be called (only the sub class knows about the shadowed output).
See the example code, it outputs A,B A
Sub Main()
Dim ClassA As New A
Dim ClassB As New B
Dim ClassC As New C
Console.WriteLine(ClassA.GetText)
Console.WriteLine(ClassB.GetText)
Console.WriteLine(ClassC.GetText)
Console.ReadKey()
End Sub
Public Class A
Public Function GetText()
Return GetSomeText()
End Function
Protected Overridable Function GetSomeText()
Return "A"
End Function
End Class
Public Class B
Inherits A
Protected Overrides Function GetSomeText() As Object
Return "B"
End Function
End Class
Public Class C
Inherits A
Protected Shadows Function GetSomeText()
Return "C"
End Function
End Class