Instrucción Interface (Visual Basic)
Declara el nombre de una interfaz e introduce las definiciones de los miembros que comprende la interfaz.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
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. |
name |
Necesario. Nombre de esta interfaz. Vea Declared Element Names. |
Of |
Opcional. Especifica que se trata de una interfaz genérica. |
typelist |
Obligatorio si se utiliza la palabra clave Of. Lista de parámetros de tipo para esta interfaz. Opcionalmente, cada parámetro de tipo se puede declarar como variante mediante los modificadores genéricos In y Out . Consulte Lista de tipos. |
Inherits |
Opcional. Indica que esta interfaz hereda los atributos y miembros de otra interfaz o interfaces. Consulte Inherits (Instrucción). |
interfacenames |
Es obligatorio si se utiliza la instrucción Inherits . Los nombres de las interfaces de las que deriva esta interfaz. |
modifiers |
Opcional. Modificadores adecuados para el miembro de interfaz que se va a definir. |
Property |
Opcional. Define una propiedad que es miembro de la interfaz. |
Function |
Opcional. Define un procedimiento Function que es miembro de la interfaz. |
Sub |
Opcional. Define un procedimiento Sub que es miembro de la interfaz. |
Event |
Opcional. Define un evento que es miembro de la interfaz. |
Interface |
Opcional. Define una interfaz anidada dentro de esta interfaz. La definición de interfaz anidada debe finalizar con una instrucción End Interface . |
Class |
Opcional. Define una clase que es miembro de la interfaz. La definición de clase miembro debe finalizar con una instrucción End Class . |
Structure |
Opcional. Define una estructura que es miembro de la interfaz. La definición de estructura miembro debe finalizar con una instrucción End Structure . |
membername |
Obligatorio para cada propiedad, procedimiento, evento, interfaz, clase o estructura que se haya definido como miembro de la interfaz. Nombre del miembro. |
End Interface |
Termina la definición de Interface . |
Comentarios
Una interfaz define un conjunto de miembros, como propiedades y procedimientos, que las clases y estructuras pueden implementar. La interfaz define solo las firmas de los miembros y no sus trabajos internos.
Una clase o estructura implementa la interfaz proporcionando código para cada miembro definido por la interfaz. Por último, cuando la aplicación crea una instancia a partir de esa clase o estructura, existe un objeto y se ejecuta en memoria. Para obtener más información, consulte Objetos y clases e Interfaces.
Interface
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 interfaz 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).
De manera predeterminada, el acceso a las interfaces 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 de interfaces. Puede definirse una interfaz dentro de otra. La interfaz externa se denomina interfaz contenedora y la interfaz interna se denomina interfaz anidada.
Declaración de miembros. Cuando se declara una propiedad o un procedimiento como miembro de una interfaz, solo se define la firma de la propiedad o el procedimiento. Esto incluye el tipo de elemento (propiedad o procedimiento), sus parámetros y tipos de parámetros, y su tipo de valor devuelto. Por este motivo, la definición de miembro usa solo una línea de código y las instrucciones de terminación como
End Function
oEnd Property
no son válidas en una interfaz.Por el contrario, al definir una enumeración o estructura, o una clase o interfaz anidadas, es necesario incluir sus miembros de datos.
Modificadores de miembro. No puede usar ningún modificador de acceso al definir miembros del módulo, ni puede especificar Shared ni ningún modificador de procedimiento excepto Overloads. Puede declarar cualquier miembro con Shadows y puede usar Default al definir una propiedad, así como ReadOnly o WriteOnly.
Herencia. Si una interfaz usa la instrucción Inherits, se pueden especificar una o varias interfaces base. Se puede heredar de dos interfaces aunque definan un miembro con el mismo nombre. Si se hace, el código de implementación debe usar la calificación de nombre para especificar qué miembro se está implementando.
Una interfaz no puede heredar de otra interfaz con un nivel de acceso más restrictivo. Por ejemplo, una interfaz
Public
no puede heredar de una interfazFriend
.Una interfaz no puede heredar de una interfaz anidada dentro de ella.
Implementación. Cuando una clase usa la instrucción Implements para implementar esta interfaz, debe implementar todos los miembros definidos dentro de la interfaz. Además, cada firma del código de implementación debe coincidir exactamente con la firma correspondiente definida en esta interfaz. Sin embargo, el nombre del miembro en el código de implementación no tiene que coincidir con el nombre del miembro tal y como se define en la interfaz.
Cuando una clase está implementando un procedimiento, no puede designar el procedimiento como
Shared
.Propiedad Default. Una interfaz puede especificar como máximo una propiedad como su propiedad predeterminada, a la que se puede hacer referencia sin usar el nombre de la propiedad. Puede especificar esta propiedad mediante la declaración con el modificador Default.
Tenga en cuenta que esto significa que una interfaz solo puede definir una propiedad predeterminada si no hereda ninguna.
Comportamiento
Nivel de acceso. Todos los miembros de la interfaz tienen implícitamente acceso de tipo Public. No se puede usar ningún modificador de acceso al definir un miembro. Sin embargo, una clase que implementa la interfaz puede declarar un nivel de acceso para cada miembro implementado.
Si asigna una instancia de clase a una variable, el nivel de acceso de sus miembros puede depender de si el tipo de datos de la variable es la interfaz subyacente o la clase de implementación. Esto se ilustra en el siguiente ejemplo:
Public Interface IDemo Sub DoSomething() End Interface Public Class implementIDemo Implements IDemo Private Sub DoSomething() Implements IDemo.DoSomething End Sub End Class Dim varAsInterface As IDemo = New implementIDemo() Dim varAsClass As implementIDemo = New implementIDemo()
Si accede a los miembros de clase a través de
varAsInterface
, todos tienen acceso público. Sin embargo, si accede a los miembros a través devarAsClass
, elSub
procedimientodoSomething
tiene acceso privado.Ámbito. Una interfaz está en ámbito en su espacio de nombres, clase, estructura o módulo.
El ámbito de todos los miembros de la interfaz es la estructura completa.
Lifetime (Duración). Una interfaz no tiene una duración, ni sus miembros. Cuando una clase implementa una interfaz y un objeto se crea como una instancia de esa clase, el objeto tiene una duración dentro de la aplicación en la que se ejecuta. Para obtener más información, consulte el apartado sobre períodos de duración en Class (Instrucción).
Ejemplo
En el ejemplo siguiente se usa la instrucción Interface
para definir una interfaz denominada thisInterface
, que se debe implementar con una instrucción Property
y una instrucción Function
.
Public Interface thisInterface
Property ThisProp(ByVal thisStr As String) As Char
Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface
Tenga en cuenta que las instrucciones Property
y Function
no presentan bloques que terminan con End Property
y End Function
dentro de la interfaz. Una interfaz define solo la firma de sus miembros. Los bloques Property
y Function
completos aparecen en una clase que implementa thisInterface
.