Ante una situación de sobre-escritura de métodos en una clase base y heredada, la palabra clave
MyClass, nos permite, alterar el comportamiento por defecto en la llamada al método, forzando la
ejecución del que existe en la clase base. Expliquemos mejor este aspecto con un ejemplo ilustrativo.
Creamos la clase Empleado y su clase hija Administrativo, y en ambas escribimos el método
VerFecha( ) utilizando sobre-escritura; este método va a ser llamado a su vez desde el método
MostrarDatos( ), que se encuentra en la clase Empleado con la siguiente sintaxis.
Me.VerFecha()
Si desde el código cliente instanciamos un objeto de Administrativo, al ejecutar MostrarDatos( ), la
versión de VerFecha( ) ejecutada será la que se encuentra en el código de la clase Administrativo.
¿Pero y si necesitamos ejecutar la versión de VerFecha( ) que está en el código de la clase Empleado?,
pues es posible utilizando la palabra clave MyClass. Veamos este ejemplo al completo en el Código
fuente 272.
Module Module1
Sub Main()
Dim oAdmin As New Administrativo()
oAdmin.Nombre = "Alfredo"
oAdmin.FechaAlta = DateTime.Today
oAdmin.MostrarDatos()
Console.ReadLine()
End Sub
End Module
Public Class Empleado
Public Nombre As String
Public FechaAlta As Date
Public Sub MostrarDatos()
Console.WriteLine("Datos del empleado")
Console.WriteLine("Nombre: {0}", Me.Nombre)
Me.VerFecha() ' ejecuta VerFecha de clase Administrativo
MyClass.VerFecha() ' ejecuta VerFecha de clase Empleado
End Sub
Public Overridable Sub VerFecha()
Console.WriteLine("Fecha alta completa: {0}", Me.FechaAlta)
End Sub
End Class
Public Class Administrativo
Inherits Empleado
Public Overrides Sub VerFecha()
Console.WriteLine("Fecha alta -sólo nombre mes- : {0}",
Me.FechaAlta.ToString("MMMM"))
End Sub
End Class
Como podemos suponer, MyClass fuerza a ejecutar la implementación del método que existe en la
clase desde la que se hace la llamada a dicho método.
Module Module1
Sub Main()
Dim oAdmin As New Administrativo()
oAdmin.Nombre = "Alfredo"
oAdmin.FechaAlta = DateTime.Today
oAdmin.MostrarDatos()
Console.ReadLine()
End Sub
End Module
Public Class Empleado
Public Nombre As String
Public FechaAlta As Date
Public Sub MostrarDatos()
Console.WriteLine("Datos del empleado")
Console.WriteLine("Nombre: {0}", Me.Nombre)
Me.VerFecha() ' ejecuta VerFecha de clase Administrativo
MyClass.VerFecha() ' ejecuta VerFecha de clase Empleado
End Sub
Public Overridable Sub VerFecha()
Console.WriteLine("Fecha alta completa: {0}", Me.FechaAlta)
End Sub
End Class
Public Class Administrativo
Inherits Empleado
Public Overrides Sub VerFecha()
Console.WriteLine("Fecha alta -sólo nombre mes- : {0}",
Me.FechaAlta.ToString("MMMM"))
End Sub
End Class
Código fuente 272
No hay comentarios:
Publicar un comentario