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.

Vea también

Otros recursos

Herencia en Visual Basic

Interfaces en Visual Basic