Fundamentos de la herencia
Actualización: noviembre 2007
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:
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 múltiple, Visual Basic solamente permite la herencia simple en las clases; es decir, las clases derivadas solo pueden tener una clase base. Aunque no se permite la herencia múltiple en las clases, éstas pueden implementar múltiples interfaces, lo que permite lograr de manera eficaz los mismos fines.
Para evitar la exposición de elementos restringidos en una clase base, el tipo de acceso de una clase derivada debe ser igual o más 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 presenta las siguientes instrucciones y modificadores de nivel de clase para ofrecer compatibilidad con la herencia:
Instrucción Inherits: especifica la clase base.
Modificador NotInheritable: impide que los programadores utilicen la clase como clase base.
Modificador MustInherit: especifica que la clase sólo se debe utilizar como clase base. Las instancias de las clases MustInherit no se pueden crear directamente; sólo se pueden crear como instancias de clase base de una clase derivada. Otros lenguajes de programación, como C++ y C#, utilizan el término clase abstracta para describir tal clase.
Reemplazar propiedades y métodos en clases derivadas
De forma predeterminada, una clase derivada hereda los métodos y propiedades de su clase base. Si una propiedad o método heredados tienen que comportarse de manera diferente en la clase derivada, se pueden invalidar. Es decir, se puede definir 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:
Overridable: permite reemplazar una propiedad o un método de una clase en una clase derivada.
Overrides: reemplaza una propiedad o un método Overridable definido en la clase base.
NotOverridable: evita que una propiedad o un método se invaliden en una clase que hereda. De forma predeterminada, los métodos Public son NotOverridable.
MustOverride: requiere que una clase derivada reemplace una propiedad o un método. Cuando se utiliza la palabra clave MustOverride, la definición del método está formada simplemente por la instrucción Sub, Function o Property. No se permite ninguna otra instrucción y no hay específicamente ninguna instrucción End Sub o End Function. Los métodos MustOverride se deben declarar en las clases MustInherit.
Para obtener más información sobre los métodos de reemplazo, consulte Invalidar propiedades y métodos.
La palabra clave MyBase
Puede utilizar la palabra clave MyBase para llamar a métodos de una clase base cuando invalide 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 CalculateShipping( _
ByVal Dist As Double, _
ByVal Rate As Double) _
As Double
' Call the method in the base class and modify the return value.
Return MyBase.CalculateShipping(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 o utilizar en una comparación Is.
No es necesario definir el método al que certifica MyBase en la clase base inmediata; puede definirse en una clase base heredada indirectamente. Para compilar correctamente una referencia certificada mediante MyBase, alguna clase base debe contener un método que se corresponda con el nombre y los tipos de los parámetros que aparecen en la llamada.
No puede utilizar MyBase para llamar a métodos de clase base con el modificador MustOverride.
No se puede utilizar MyBase para calificarse a sí misma. Por tanto, el siguiente código no es válido:
MyBase.MyBase.BtnOK_Click()
No se puede utilizar MyBase en módulos.
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 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 invalidado en una clase derivada.
MyClass es una palabra clave, no un objeto real. MyClass no se puede asignar a una variable, pasar a procedimientos o utilizar en una comparación 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 módulos estándar.
MyClass puede utilizarse para calificar un método que está definido en un clase base y que no tiene ninguna implementación del método proporcionado en esa clase. Este tipo de referencia tiene el mismo significado que MyBase.Método.
Vea también
Tareas
Conceptos
Invalidar propiedades y métodos