VB.NET: Overloading, shadowing y overriding
Overloading: En general, hay overloading cuando dos o más métodos tienen el mismo nombre y devuelven lo mismo, pero los argumentos que reciben son diferentes en tipo y/o cantidad. Cuando nombre, tipo devuelto y argumentos coinciden, ello sólo puede ocurrir en clases diferentes para que no haya una definición duplicada. Si son clases sin relación, no hay problema. Pero si una hereda de otra, puede ocurrir Shadowing u Overriding.
Shadowing: Esto es lo que ocurre por defecto en VB.NET. Básicamente, dado un objeto, no se llama la definición dada por su tipo intrínseco, sino por el aparente. En otras palabras, no hay polimorfismo. Ejemplo:
Imports System
Public Class Base
Public Sub ShadowedSub()
Console.WriteLine("ShadowedSub:Base")
End Sub
End Class
Public Class Derived : Inherits Base
Public Sub ShadowedSub()
Console.WriteLine("ShadowedSub:Derived")
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim derived As New Derived
derived.ShadowedSub() 'Derived
Dim upcastedDerived As Base = New Derived()
upcastedDerived.ShadowedSub() '¡Base! No hay polimorfismo
End Sub
End Class
Overriding: Para que el polimorfismo/mecanismo virtual funcione, debemos declarar al método como Overridable en Base y como Overrides en Derived. Le cambio el nombre a OverridenSub sólo por prolijidad, no era necesario.
Imports System
Public Class Base
Public Overridable Sub OverridenSub()
Console.WriteLine("OverridenSub:Base")
End Sub
End Class
Public Class Derived : Inherits Base
Public Overrides Sub OverridenSub()
Console.WriteLine("OverridenSub:Derived")
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim derived As New Derived
derived.OverridenSub() 'Derived
Dim upcastedDerived As Base = New Derived()
upcastedDerived.OverridenSub() 'Derived, como cabe esperar
End Sub
End Class
Comments
Post a Comment