Instrucción Interface (Visual Basic)
Actualización: noviembre 2007
Declara el nombre de una interfaz e introduce las definiciones de los miembros que incluye la interfaz.
[ <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
attributelist
Opcional. Vea Lista de atributos.accessmodifier
Opcional. Puede ser una de las siguientes:Shadows
Opcional. Vea Shadows.name
Obligatorio. Nombre de esta interfaz. Vea Nombres de elementos declarados.Of
Opcional. Especifica que ésta es una interfaz genérica.typelist
Es obligatoria si se utiliza la palabra clave Of. Lista de parámetros de tipo de esta interfaz. Vea Lista de tipos.Inherits
Opcional. Indica que esta interfaz hereda los atributos y miembros de otra interfaz o interfaces. Vea Inherits (Instrucción).interfacenames
Es obligatoria si se utiliza la instrucción Inherits. Nombres de las interfaces de las que deriva esta interfaz.modifiers
Opcional. Modificadores adecuados para el miembro de interfaz que se está definiendo.Property
Opcional. Define una propiedad que es un miembro de la interfaz.Function
Opcional. Define un procedimiento Function que es un miembro de la interfaz.Sub
Opcional. Define un procedimiento Sub que es un miembro de la interfaz.Event
Opcional. Define un evento que es un miembro de la interfaz.Interface
Opcional. Define una interfaz que está 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 un 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 un 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 definidos 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 las propiedades y procedimientos, que pueden implementar las clases y estructuras. La interfaz sólo define las firmas de los miembros y no sus mecanismos internos.
Una clase o estructura implementa la interfaz proporcionando código para cada miembro definido por la interfaz. Finalmente, 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, vea Programación orientada a objetos en Visual Basic y Interfaces en Visual Basic.
Para consultar una comparación de interfaces y clases, vea Información general sobre interfaces.
Sólo puede utilizar Interface en un espacio de nombres o al nivel de módulo. Esto significa que el contexto de la declaración de una interfaz debe ser un archivo de código fuente, espacio de nombres, clase, estructura, módulo o interfaz y no puede ser un procedimiento ni un bloque. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados.
Las interfaces tienen Friend (Visual Basic) como acceso predeterminado. Puede ajustar sus niveles de acceso con los modificadores de acceso. Para obtener más información, vea Niveles de acceso en Visual Basic.
Reglas
Anidar interfaces. Puede definir una interfaz dentro de otra. La interfaz exterior se denomina la interfaz contenedora y la interfaz interior se denomina interfaz anidada.
Declaración de miembro. Cuando declara una propiedad o procedimiento como un miembro de una interfaz, está definiendo sólo la firma de esa propiedad o procedimiento. Esto incluye el tipo de elemento (propiedad o procedimiento), sus parámetros y tipos de parámetro y su tipo de valor devuelto. Por esta razón, la definición de miembro sólo utiliza una línea de código y las instrucciones de terminación como End Function o End Property no son válidas en las interfaces.
En cambio, cuando define una enumeración o estructura, o una clase o interfaz anidada, es necesario incluir sus miembros de datos.
Modificadores de miembros. No puede utilizar ningún modificador de acceso al definir miembros de módulo de definición, ni se puede especificar Shared (Visual Basic) ni ningún modificador de procedimiento excepto Overloads. Puede declarar cualquier miembro con Shadows y puede utilizar Default (Visual Basic) al definir una propiedad, así como ReadOnly (Visual Basic) o WriteOnly.
Herencia. Si la interfaz utiliza la Inherits (Instrucción), puede especificar una o más interfaces base. Puede heredar de dos interfaces aun cuando cada una de ellas defina un miembro con el mismo nombre. De hacerlo así, el código que implementa debe utilizar la calificación de nombres para especificar qué miembro 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 una interfaz de tipo Friend.
Una interfaz no puede heredar de una interfaz anidada dentro de ella.
Implementación. Cuando una clase utiliza la instrucción Implements (Visual Basic) para implementar esta interfaz, debe implementar todos los miembros definidos dentro de la interfaz. Además, cada firma incluida el código que implementa debe coincidir exactamente con la firma correspondiente definida en esta interfaz. Sin embargo, el nombre del miembro del código que implementa no tiene por qué coincidir con el nombre de miembro definido en la interfaz.
Cuando una clase está implementando un procedimiento, no puede designar el procedimiento como Shared.
Propiedad predeterminada. Una interfaz puede especificar a lo sumo una propiedad como su propiedad predeterminada, a la que se puede hacer referencia sin utilizar el nombre de propiedad. Esta propiedad se especifica declarándola con el modificador Default (Visual Basic). Para obtener más información, vea Propiedades predeterminadas.
Observe que esto significa que una interfaz sólo puede definir una propiedad predeterminada si no hereda ninguna.
Comportamiento
Nivel de acceso. Todos los miembros de interfaz tienen implícitamente acceso Public (Visual Basic). No puede utilizar 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 el de la interfaz subyacente o el de la clase implementadora. 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 tiene acceso a los miembros de clase a través de varAsInterface, todos ellos tienen acceso público. Sin embargo, si tiene acceso a los miembros a través de varAsClass, el procedimiento SubdoSomething tiene acceso privado.
Ámbito. Una interfaz está en ámbito a lo largo de su espacio de nombres, clase, estructura o módulo.
El ámbito de cada uno de los miembros de la interfaz es la interfaz completa.
Período de duración. Una interfaz no tiene en sí misma un período de duración, ni tampoco sus miembros. Cuando una clase implementa una interfaz y se crea un objeto como una instancia de esa clase, el objeto tiene un período de duración dentro de la aplicación en la que se está ejecutando. Para obtener más información, vea "Período de duración" en Instrucción Class (Visual Basic).
Ejemplo
El ejemplo siguiente utiliza 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
Observe que las instrucciones Property y Function no introducen el bloques que terminan con End Property y End Function dentro de la interfaz. Una interfaz sólo define las firmas de sus miembros. Los bloques Property y Function completos aparecen en las clases que implementan thisInterface.
Vea también
Conceptos
Tipos genéricos en Visual Basic
Referencia
Instrucción Class (Visual Basic)
Instrucción Function (Visual Basic)
Instrucción Sub (Visual Basic)