Herencia para usuarios de Visual Basic 6.0
Actualización: noviembre 2007
La herencia permite crear nuevas clases a partir de clases existentes. La herencia puede simplificar el diseño de la aplicación proporcionando una estructura de relaciones entre las distintas clases. También admite la reutilización de código porque sólo se debe codificar el comportamiento de clases nuevas o distintas.
Herencia de interfaces
Visual Basic 6.0
Visual Basic 6.0 admite la herencia de interfaces, que se describe con más detalles en Cambios en las interfaces para usuarios de Visual Basic 6.0.
Visual Basic 2008
Visual Basic 2008 admite la herencia de interfaces con Instrucción Interface (Visual Basic) y Implements (Instrucción). Para obtener más información sobre interfaces, vea Interfaces en Visual Basic.
Herencia de implementación
Cuando se crea una nueva clase mediante la herencia de implementación, la nueva clase obtiene automáticamente todos los miembros y la implementación de la clase base. La clase existente se llama la "clase base". La nueva clase es la "clase derivada". Se pueden agregar miembros adicionales a la clase. Se puede cambiar el comportamiento de la clase base escribiendo código en la nueva clase. Esta técnica se denomina reemplazo.
Puede crear clases heredándolas de las clases que ha creado, desde clases de referencias que agrega al proyecto o desde objetos de .NET Framework. Muchas clases de .NET Framework están relacionadas por herencia. Por ejemplo, la clase TextBox se hereda de la clase System.Windows.Forms.TextBoxBase.
Visual Basic 6.0
Visual Basic 6.0 no admite la herencia de implementación.
Visual Basic 2008
La herencia se declara en Visual Basic 2008 mediante la instrucción Inherits. En este ejemplo, la clase derivada Oak se hereda de una clase base Tree.
Public Class Oak
Inherits Tree
' Add code here to extend or
' modify the behavior of the Tree class.
End Class
MustInherit y NotInheritable
Visual Basic 6.0
En la herencia de interfaces de Visual Basic 6.0, cualquier clase puede actuar como una clase base de interfaz. No hay ninguna sintaxis para evitar que cualquier clase actúe como una clase base de interfaz. Igualmente, no hay ninguna sintaxis para exigir que una clase actúe sólo como una clase base de interfaz.
Visual Basic 2008
Junto con la herencia de implementación, Visual Basic 2008 define dos modificadores de clase, MustInherit y NotInheritable. Estos modificadores permite al programador controlar las relaciones de herencia en una aplicación.
El modificador MustInherit en una declaración de clase indica una clase de la que no se pueden crear instancias:
Public MustInherit Class BaseClass
End Class
Esto significa que BaseClass no puede aparecer después de la palabra clave New. Sólo se pueden crear instancias de las clases que se heredan de BaseClass y que tampoco tienen el modificador MustInherit. En la literatura orientada a objetos y en otros lenguajes orientados a objetos, una clase MustInherit se denomina una clase abstracta. Una clase que no es una clase MustInherit, es decir de la que se pueden crear instancias, se denomina una clase concreta.
Un concepto relacionado es clase sellada, una clase que no puede actuar como una clase base. La palabra clave NotInheritable en una definición de clase indica este estado:
Public NotInheritable Class DerivedClass
End Class
Una clase NotInheritable marca el límite de una jerarquía de herencia.
Para obtener más información, vea Herencia en Visual Basic.
Sugerencias de actualización
Las clases que actúan como interfaces en Visual Basic 6.0 se actualizan a interfaces en Visual Basic 2008. Tenga en cuenta este ejemplo de una clase base y una clase derivada de Visual Basic 6.0:
' Contents of class BaseClass
Public Sub BaseMethod()
End Sub
' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub
El Asistente para actualización genera este código actualizado:
Option Strict Off
Option Explicit On
Interface _BaseClass
Sub BaseMethod()
End Interface
Friend Class BaseClass
Implements _BaseClass
Public Sub BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Friend Class DerivedClass
Implements _BaseClass
Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Utilizando la herencia en lugar de las interfaces, el código actualizado se puede modificar a:
Friend Class BaseClass
Public Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
End Class
Esto elimina un nivel de direccionamiento indirecto, _BaseClass. También elimina una definición del método, BaseClass_BaseMethod porque el método está heredado de la clase base y no necesita ser codificado de nuevo. Si el programador desea un comportamiento diferente para la clase derivada, se puede reemplazar BaseMethod de la forma siguiente:
Friend Class BaseClass
Public Overridable Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
Public Overrides Sub BaseMethod()
' Add code here to define behavior for DerivedClass.
End Sub
End Class
Algunas técnicas que se deben tener en cuenta en las interfaces actualizadas incluyen:
Reemplazar instrucciones Interface por instrucciones Inherits.
Implementar la clase base como una interfaz, en lugar de como una clase que implementa una interfaz. Para obtener más información, consulte Cambios en las interfaces para usuarios de Visual Basic 6.0.
Implementar las clases base como clases MustInherit.
Implementar las clases derivadas como NotInheritable.