domingo, 25 de mayo de 2014

VB.NET: Overloading, shadowing y overriding

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
extraído de: en  





IT Arka| Norte -Sur -Sureste -Este -Noreste -Oeste

No hay comentarios:

Publicar un comentario