Instrucción Class (Visual Basic)
Declara el nombre de una clase e introduce la definición de las variables, propiedades, eventos y procedimientos que la clase incluye.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
Partes
Término | Definición |
---|---|
attributelist |
Opcional. Consulte Lista de atributos. |
accessmodifier |
Opcional. Puede ser uno de los siguientes: - Public - Protegido - Friend - Privado - Protected Friend - Private Protected Vea Access levels in Visual Basic. |
Shadows |
Opcional. Consulte Shadows. |
MustInherit |
Opcional. Consulte MustInherit. |
NotInheritable |
Opcional. Vea NotInheritable. |
Partial |
Opcional. Indica una definición parcial de la clase. Consulte Partial. |
name |
Necesario. Nombre de esta clase. Vea Declared Element Names. |
Of |
Opcional. Especifica que se trata de una clase genérica. |
typelist |
Se requiere si se utiliza la palabra clave Of. Lista de parámetros de tipo de esta clase. Consulte Lista de tipos. |
Inherits |
Opcional. Indica que esta clase hereda los miembros de otra clase. Consulte Instrucción Inherits. |
classname |
Es obligatorio si se utiliza la instrucción Inherits . El nombre de la clase o la interfaz de la que se deriva esta clase. |
Implements |
Opcional. Indica que esta clase implementa los miembros de una o más interfaces. Consulte Instrucción Implements. |
interfacenames |
Es obligatorio si se utiliza la instrucción Implements . Los nombres de las interfaces que implementa esta clase. |
statements |
Opcional. Instrucciones que definen los miembros de esta clase. |
End Class |
Necesario. Termina la definición de Class . |
Comentarios
Una instrucción Class
define un nuevo tipo de datos. Una clase es un bloque de creación fundamental de la programación orientada a objetos (OOP). Para más información, consulte Objetos y clases.
Class
solo se puede utilizar en un espacio de nombres o un nivel de módulo. Esto significa que el contexto de la declaración de una clase debe ser un archivo de código fuente, un espacio de nombres, una clase, una estructura, un módulo o una interfaz y no puede ser un procedimiento ni un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).
Cada instancia de una clase tiene una duración independiente de todas las demás instancias. Dicha duración comienza cuando se crea mediante una cláusula New Operator o mediante una función como CreateObject. Finaliza cuando todas las variables que apuntan a la instancia se han establecido en Nothing o en instancias de otras clases.
De manera predeterminada, el acceso a las clases es de tipo Friend. Los niveles de acceso se pueden ajustar con los modificadores de acceso. Para obtener más información, consulte Niveles de acceso en Visual Basic.
Reglas
Anidamiento. Una clase se puede definir dentro de otra. La clase externa se denomina clase contenedora, mientras que la interna se denomina clase anidada.
Herencia. Si la clase usa la instrucción Inherits, solo se puede especificar una clase base o interfaz. Una clase no puede heredar de más de un elemento.
Una clase no puede heredar de otra clase con un nivel de acceso más restrictivo. Por ejemplo, una clase
Public
no puede heredar de una claseFriend
.Una clase no puede heredar de una clase anidada dentro de ella.
Implementación. Si la clase utiliza la instrucción Implements, se deben implementar todos los miembros definidos por cada una de las interfaces que se especifican en
interfacenames
. Una excepción es la reimplementación de un miembro de la clase base. Para más información, consulte "Reimplementación" en Implements.Propiedad Default. Una clase puede especificar a lo sumo una propiedad como su propiedad predeterminada. Para más información, consulte Default.
Comportamiento
Nivel de acceso. En una clase, cada miembro se puede declarar con su propio nivel de acceso. Los miembros de la clase tienen como valor predeterminado el acceso público, excepto variables y constantes, que tienen como valor predeterminado el acceso privado. Cuando una clase tiene un acceso más restringido que cualquiera de sus miembros, el nivel de acceso de la clase tiene prioridad.
Ámbito. Una clase está en ámbito en su espacio de nombres, clase, estructura o módulo contenedores.
El ámbito de todos los miembros de la clase es toda la clase.
Lifetime (Duración). Visual Basic no admite clases estáticas. Un módulo proporciona el equivalente funcional de una clase estática. Para más información, consulte la instrucción Module.
Los miembros de la clase disponen de una duración que depende de cómo y donde se declaran. Para más información, consulte Duración en Visual Basic.
Calificación. El código que se incluye fuera de una clase debe calificar el nombre de un miembro con el nombre de dicha clase.
Si el código incluido en una clase anidada realiza una referencia sin calificar a un elemento de programación, Visual Basic busca este elemento en la clase anidada en primer lugar, a continuación en la clase contenedora y así sucesivamente hasta el elemento contenedor principal.
Clases y módulos
Estos elementos tienen muchas similitudes, pero también hay algunas diferencias importantes.
Terminología. Las versiones anteriores de Visual Basic reconocen dos tipos de módulos: módulos de clase (archivos .cls) y módulos estándar (archivos .bas). La versión actual llama a estas clases y módulos, respectivamente.
Miembros compartidos. Puede controlar si un miembro de una clase es un miembro compartido o de instancia.
Orientación a objetos. Las clases están orientadas a objetos, pero los módulos no. Puede crear una o varias instancias de una clase. Para más información, consulte Objetos y clases.
Ejemplo
En el ejemplo siguiente se usa una instrucción Class
para definir una clase y varios miembros.
Class BankAccount
Shared interestRate As Decimal
Private accountBalance As Decimal
Public holdOnAccount As Boolean = False
Public ReadOnly Property Balance() As Decimal
Get
Return accountBalance
End Get
End Property
Public Sub PostInterest()
accountBalance = accountBalance * (1 + interestRate)
End Sub
Public Sub PostDeposit(ByVal amountIn As Decimal)
accountBalance = accountBalance + amountIn
End Sub
Public Sub PostWithdrawal(ByVal amountOut As Decimal)
accountBalance = accountBalance - amountOut
End Sub
End Class