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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 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 |
No hay comentarios:
Publicar un comentario