Colaboraciones en el Guille

Herencia en Visual Basic .Net - I

Implementación de un formulario Plantilla 

Fecha: 29/Oct/2005 (26 de Octubre de 2005)
Autor: Ing. Fernando Luque Sánchez
DCE 2003 - 4 Estrellas
DCE 2005 - 2 Estrellas

[email protected]


Sres. Desarrolladores, en esta oportunidad comparto con ustedes un  ejemplo práctico y pequeño sobre Herencia, la idea del artículo es dar a conocer como implementar herencia, si bien este ejemplo es simple les puede dar la idea de como implementar otros mas complicados,

ALGO DE TEORIA

Visual Basic.Net es compatible con la herencia, la capacidad de definir clases que sirvan como base para las clases derivadas. Las clases derivadas heredan, y pueden extender, las propiedades, métodos y eventos de la clase base. Las clases derivadas también pueden reemplazar métodos heredados con nuevas implementaciones. De forma predeterminada, todas las clases creadas con Visual Basic .NET se pueden heredar.

La herencia permite escribir y depurar una clase una vez, y después volver a utilizar ese código una y otra vez como base de nuevas clases. La herencia también permite utilizar el polimorfismo basado en la herencia, la posibilidad de definir clases que pueden utilizarse de forma intercambiable mediante código cliente en tiempo de ejecución, pero con funcionalidad diferente, incluyo con métodos o propiedades denominados de manera idéntica.

La instrucción Inherits

La instrucción Inherits se utiliza para declarar una nueva clase, denominada clase derivada, basada en una clase existente conocida como clase base. Las clases derivadas heredan, y pueden extender, las propiedades, métodos, eventos, campos y constantes definidos en la clase base. En la siguiente sección se describen algunas de las reglas de herencia, así como los modificadores que se pueden utilizar para cambiar la forma en que las clases heredan o son heredadas:

Modificadores de herencia

Visual Basic .Net presenta las siguientes instrucciones y modificadores de nivel de clase para ofrecer compatibilidad con la herencia:

Reemplazar propiedades y métodos en clases derivadas

De forma predeterminada, una clase derivada hereda métodos de su clase base. Si una propiedad o método heredado debe comportarse de forma diferente en la clase derivada, puede ser reemplazado; es decir, puede definirse una nueva implementación del método en la clase derivada. Los siguientes modificadores se utilizan para controlar cómo se reemplazan propiedades y métodos:

La palabra clave MyBase

Puede utilizar la palabra clave MyBase para llamar a métodos de una clase base cuando reemplace métodos en una clase derivada. Por ejemplo, suponga que diseña una clase derivada que reemplaza un método heredado de la clase base. El método reemplazado puede llamar al método de la clase base y modificar el valor devuelto como se muestra en el fragmento de código siguiente:

Class DerivedClass
   Inherits BaseClass
   Public Overrides Function CalcularPago(ByVal Dist As Double, _
                                    ByVal Rate As Double) As Double
      ' Llama al método de la Clase Base y retorna el Valor
      Return MyBase.CalcularPago(Dist, Rate) * 2
   End Function
End Class

En la lista siguiente se describen las restricciones de uso de MyBase:

La palabra clave MyClass

La palabra clave MyClass permite llamar a un método Overridable implementado en la clase y asegurarse de que se llama a la implementación del método en esta clase y no a la de un método reemplazado en una clase derivada.

Fuente: MSDN Library de Visual Studio .Net 2003

EL EJEMPLO

El formulario Base llamado frmPlantilla tiene el siguiente diseño:

Herencia en Visual Basic .Net

En la clase base se ha creado una función con el siguiente código:

Protected Function CrearDataSet() As DataSet
    Try
        Dim cn As New SqlConnection("user id=sa;initial catalog=Northwind;persist security info=False")
        Dim daClientes As New SqlDataAdapter("Select CustomerId,CompanyName,ContactName, Address from Customers", cn)
        Dim dsDatos As New DataSet
        daClientes.Fill(dsDatos, "Clientes")
        Return dsDatos 
    Catch Ex As Exception
        MessageBox.Show("Error: " & Ex.Message)
        End
    End Try
End Function

 

La clase heredada, que es otro formulario tiene el siguiente diseño:

Herencia en Visual Basic .Net

 

A continuación sigue código en Visual Basic:

Al cargar el formulario heredado

Private Sub CargarConGrid(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

   lblTitulo.Text = "Clientes - Herencia en Visual Basic .Net"
   'Especificar el origen del Grid
   'La función: CrearDataSet se encuentra en el 
   'formulario frmPlantilla que es del cual se hereda
   dgClientes.DataSource = CrearDataSet.Tables("Clientes")
   dgClientes.CaptionText = "Clientes Registrados" 
  'Darle formato al Grid
   FormatearGrid()

End Sub

 

Note en la porción de código anterior la línea: 
dgClientes.DataSource = CrearDataSet.Tables("Clientes")
en esta instrucción se ejecuta la función CrearDataSet implementada en la clase Base.

La línea de definición de la clase derivada es como sigue:

Public Class frmClientesGrid
    Inherits VBHerencia.frmPlantilla

Los pasos para crear un formulario heredado son los siguientes:

1. Botón derecho en el Proyecto, seleccionar Agregar, luego Agregar formulario heredado... se muestra lo siguiente:

Herencia en Visual Basic .Net

2. Escribir el nombre del formulario heredado y pulsar click en Abrir

Herencia en Visual Basic .Net

3. Seleccionar el objeto (formulario) del cual se heredará y pulsar click en Aceptar

Herencia en Visual Basic .Net


 Al crearse el formulario heredado para nuestro ejemplo aparece con el siguiente diseño visto desde el IDE, en este hemos insertado un Grid, note los identificadores de los controles que pertenecen a la clase Base.

Herencia en Visual Basic .Net

Para terminar con el ejemplo, formateamos el Grid con el siguiente procedimiento

Private Sub FormatearGrid()
        Dim EstiloTabla As New DataGridTableStyle
        With EstiloTabla
            .AlternatingBackColor = Color.LightCyan
            .BackColor = Color.LightYellow
            .ForeColor = Color.DarkGreen
            .GridLineColor = Color.Chocolate
            .GridLineStyle = System.Windows.Forms.DataGridLineStyle.None
            .HeaderBackColor = Color.MidnightBlue
            .HeaderFont = New Font("Times New Roman", 8.0!, FontStyle.Bold)
            .HeaderForeColor = Color.White
            .MappingName = "Clientes"
        End With 
        ' Formato para las columnas
        Dim Col01 As New DataGridTextBoxColumn
        With Col01
            .HeaderText = "Id. Cliente "
            .MappingName = "CustomerID"
            .Width = 70
        End With 

        Dim Col02 As New DataGridTextBoxColumn
        With Col02
            .HeaderText = "Compañía"
            .MappingName = "CompanyName"
            .Width = 200
        End With

        Dim Col03 As New DataGridTextBoxColumn
        With Col03
            .HeaderText = "Contacto"
            .MappingName = "ContactName"
            .Width = 150
        End With

        Dim Col04 As New DataGridTextBoxColumn
        With Col04
            .HeaderText = "Dirección"
            .MappingName = "Address"
            .Width = 180
        End With 
        'Añadir los estilos de columnas al estiloTabla
        EstiloTabla.GridColumnStyles.AddRange _
            (New DataGridColumnStyle() _
            {Col01, Col02, Col03, Col04})
        'Añadir el estilo al Grid
        dgClientes.TableStyles.Add(EstiloTabla)
End Sub
 

Respecto al formateo de Grid pueden visitar:
http://www.elguille.info/colabora/NET2005/FernandoLuque_FormateandoDataGrid.htm

 

Ing. Fernando Luque Sánchez
De Trujillo - Perú para el mundo entero


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SQLClient


Fichero con el código de ejemplo: FernandoLuque_HerenciaNetI.zip - (10) KB


ir al índice principal del Guille