Buscador

Diferencias entre sobrecarga y sobre-escritura en base al tipo de enlace - I

La otra diferencia entre sobrecarga y sobre-escritura consiste en el tipo de enlace que utilizan. Mientras que la sobrecarga se basa en enlace temprano, la sobre-escritura emplea enlace tardío. 
El mejor modo de comprobar este punto, consiste en declarar una variable con un tipo perteneciente a una clase base, pero asignándole un objeto correspondiente a una clase heredada. 
Por ejemplo, en el caso de la sobrecarga, creamos las ya conocidas clases Empleado y Administrativo, escribiendo el método VerAlta( ), sobrecargado en cada una de ellas.
A continuación declaramos una variable de tipo Empleado, pero instanciamos un objeto de la clase Administrativo y lo asignamos a la variable. Debido a que el enlace temprano se basa en el tipo de la variable y no en el objeto que contiene, el método VerAlta( ) al que podremos acceder será el que se encuentra en la clase Empleado. Veamos el Código fuente 270.

Module Module1
Sub Main()
Dim loPersona As Empleado
loPersona = New Administrativo()
loPersona.psNombre = "Juan García"
loPersona.pdtFHAlta = "15/1/2002"
' como la sobrecarga utiliza enlace temprano,
' se basa en el tipo de la variable y no
' en el objeto que se asigna a esa variable,
' por ello sólo es visible la implementación
' del método que hay en la clase Empleado
loPersona.VerAlta()
' si intentamos ejecutar el método VerAlta()
' que recibe una cadena, se producirá el siguiente error:
' "Demasiados argumentos para 'Public Sub VerAlta()'."
loPersona.VerAlta("Mes") ' <-- error
Console.ReadLine()
End Sub
End Module
Public Class Empleado
Public psNombre As String
Public pdtFHAlta As Date
' mostrar la fecha de alta al completo
Public Sub VerAlta()
Console.WriteLine("El empleado {0} se incorporó el {1}", _
Me.psNombre, Me.pdtFHAlta)
End Sub
End Class
Public Class Administrativo : Inherits Empleado
' mostrar sólo una parte de la fecha de alta
' según el parámetro pasado
Public Overloads Sub VerAlta(ByVal lsParteFecha As String)
Dim lsValorFecha As String
Select Case lsParteFecha
Case "Mes"
lsValorFecha = Format(Me.pdtFHAlta, "MMMM")
Case "DiaSemana"
lsValorFecha = Format(Me.pdtFHAlta, "dddd")
End Select
Console.WriteLine("Empleado {0}", Me.psNombre)
Console.WriteLine("Incorporado {0}", lsValorFecha)
End Sub
End Class
Código fuente 270

1 comentario: