Você está na página 1de 10

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, mtodos y eventos de la clase base. Las clases derivadas tambin pueden reemplazar mtodos 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 despus volver a utilizar ese cdigo una y otra vez como base de nuevas clases. La herencia tambin permite utilizar el polimorfismo basado en la herencia, la posibilidad de definir clases que pueden utilizarse de forma intercambiable mediante cdigo cliente en tiempo de ejecucin, pero con funcionalidad diferente, incluyo con mtodos o propiedades denominados de manera idntica. La instruccin Inherits La instruccin 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, mtodos, eventos, campos y constantes definidos en la clase base. En la siguiente seccin 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: De forma predeterminada, todas las clases son heredables a menos que se marquen con la palabra clave NotInheritable. Las clases pueden heredar de otras clases del proyecto o de clases en otros ensamblados a los que hace referencia el proyecto. A diferencia de los lenguajes que permiten la herencia mltiple, Visual Basic .NET slo permite la herencia simple en las clases; es decir, las clases derivadas slo pueden tener una clase base. Aunque no se permite la herencia mltiple en las clases, stas pueden implementar mltiples interfaces, lo que permite lograr de manera eficaz los mismos fines. Para evitar la exposicin de elementos restringidos en una clase base, el tipo de acceso de una clase derivada debe ser igual o ms restrictivo que el de su clase base. Por ejemplo, una clase Public no puede heredar una clase Friend o Private, y una clase Friend no puede heredar una clase Private.

Modificadores de herencia
Visual Basic .Net presenta las siguientes instrucciones y modificadores de nivel de clase para ofrecer compatibilidad con la herencia: Instruccin Inherits: especifica la clase base. Modificador NotInheritable: impide que los programadores utilicen la clase como clase base. Modificador MustInherit: especifica que la clase slo se debe utilizar como clase base. Las instancias de las clases MustInherit no se pueden crear directamente; slo se pueden crear como instancias de clase base de una clase derivada. Otros lenguajes de programacin, como C++ y C#, utilizan el trmino clase abstracta para describir tal clase.

Reemplazar propiedades y mtodos en clases derivadas


De forma predeterminada, una clase derivada hereda mtodos de su clase base. Si una propiedad o mtodo heredado debe comportarse de forma diferente en la clase derivada, puede ser reemplazado; es decir, puede definirse una nueva implementacin del mtodo en la clase derivada. Los siguientes modificadores se utilizan para controlar cmo se reemplazan propiedades y mtodos: Overridable: permite reemplazar una propiedad o un mtodo de una clase en una clase derivada. Overrides: reemplaza una propiedad o un mtodo Overridable definido en la clase base. NotOverridable: impide reemplazar una propiedad o mtodo en una clase que hereda. Los mtodos Public son NotOverridable de manera predeterminada. MustOverride: requiere que una clase derivada reemplace una propiedad o un mtodo. Cuando se utiliza la palabra clave MustOverride, la definicin del mtodo consiste simplemente en la instruccin Sub, Function o Property. No se permite ninguna otra instruccin y, especficamente, no existe ninguna instruccin End Sub ni

End Function. Los mtodos MustOverride deben declararse en las clases MustInherit.

La palabra clave MyBase


Puede utilizar la palabra clave MyBase para llamar a mtodos de una clase base cuando reemplace mtodos en una clase derivada. Por ejemplo, suponga que disea una clase derivada que reemplaza un mtodo heredado de la clase base. El mtodo reemplazado puede llamar al mtodo de la clase base y modificar el valor devuelto como se muestra en el fragmento de cdigo siguiente:
Class DerivedClass Inherits BaseClass Public Overrides Function CalcularPago(ByVal Dist As Double, _ ByVal Rate As Double) As Double ' Llama al mtodo 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: MyBase hace referencia a la clase base inmediata y a sus miembros heredados. No se puede utilizar para tener acceso a miembros Private de la clase. MyBase es una palabra clave, no un objeto real. MyBase no se puede asignar a una variable, pasar a procedimientos ni utilizar en una comparacin Is. No es necesario definir el mtodo al que califica MyBase en la clase base inmediata; puede definirse en una clase base heredada indirectamente. Para compilar correctamente una referencia calificada mediante MyBase, alguna clase base debe contener un mtodo correspondiente al nombre y el tipo de los parmetros que aparezcan en la llamada.

No puede utilizar MyBase para llamar a mtodos de clase base con el modificador MustOverride.

No se puede utilizar MyBase para calificarse a s misma. Por tanto, el siguiente cdigo no es vlido:

MyBase.MyBase.BtnOK_Click()

' Syntax error.

No se puede utilizar MyBase en mdulos. No se puede utilizar MyBase para tener acceso a miembros de clase base marcados como Friend si la clase base est en un ensamblado diferente.

La palabra clave MyClass


La palabra clave MyClass permite llamar a un mtodo Overridable implementado en la clase y asegurarse de que se llama a la implementacin del mtodo en esta clase y no a la de un mtodo reemplazado en una clase derivada. MyClass es una palabra clave, no un objeto real. No se puede asignar a una variable, pasar a procedimientos ni utilizar en una comparacin Is. MyClass hace referencia a la clase base inmediata y a sus miembros heredados. MyClass puede utilizarse como calificador de miembros Shared. MyClass no se puede utilizar en mdulos estndar. MyClass puede utilizarse para calificar un mtodo que est definido en un clase base y que no tiene ninguna implementacin del mtodo proporcionado en esa clase. Tal referencia tiene el mismo significado que MyBase.Method. Fuente: MSDN Library de Visual Studio .Net 2003 EL EJEMPLO El formulario Base llamado frmPlantilla tiene el siguiente diseo:

En la clase base se ha creado una funcin con el siguiente cdigo:


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 diseo:

A continuacin sigue cdigo 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 funcin: 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 porcin de cdigo anterior la lnea: dgClientes.DataSource = CrearDataSet.Tables("Clientes") en esta instruccin se ejecuta la funcin CrearDataSet implementada en la clase Base. La lnea de definicin de la clase derivada es como sigue:
Public Class frmClientesGrid Inherits VBHerencia.frmPlantilla

Los pasos para crear un formulario heredado son los siguientes: 1. Botn derecho en el Proyecto, seleccionar Agregar, luego Agregar formulario heredado... se muestra lo siguiente:

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

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

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

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 = "Compaa" .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 = "Direccin" .MappingName = "Address" .Width = 180 End With 'Aadir los estilos de columnas al estiloTabla EstiloTabla.GridColumnStyles.AddRange _ (New DataGridColumnStyle() _ {Col01, Col02, Col03, Col04}) 'Aadir el estilo al Grid dgClientes.TableStyles.Add(EstiloTabla) End Sub

Você também pode gostar