Instrucción Interface (Visual Basic)

Declara el nombre de una interfaz e introduce las definiciones de los miembros que la interfaz comprende.

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. Vea Lista de atributos.
accessmodifier Opcional. Puede ser uno de los siguientes:

- Público
- Protegido
- Amigo
- Privado
- Protected Friend
- Private Protected

Consulte Niveles de acceso en Visual Basic.
Shadows Opcional. Vea Sombras.
name Necesario. Nombre de esta interfaz. Vea Declared Element Names.
Of Opcional. Especifica que se trata de una interfaz genérica.
typelist Obligatorio si usa la palabra clave Of. Lista de parámetros de tipo para esta interfaz. Opcionalmente, cada parámetro de tipo se puede declarar como variant mediante In modificadores Out genéricos y . Vea Lista de tipos.
Inherits Opcional. Indica que esta interfaz hereda los atributos y miembros de otra interfaz o interfaces. Vea Inherits Statement.
interfacenames Es obligatorio 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 va a definir.
Property Opcional. Define una propiedad que es miembro de la interfaz .
Function Opcional. Define un Function procedimiento que es miembro de la interfaz .
Sub Opcional. Define un Sub procedimiento 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 terminar con una End Interface instrucción .
Class Opcional. Define una clase que es miembro de la interfaz . La definición de clase miembro debe terminar con una End Class instrucción .
Structure Opcional. Define una estructura que es miembro de la interfaz . La definición de la estructura de miembro debe terminar con una End Structure instrucción .
membername Obligatorio para cada propiedad, procedimiento, evento, interfaz, clase o estructura definida 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 su funcionamiento interno.

Una clase o estructura implementa la interfaz al proporcionar 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, vea Objetos e 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 declaración de una interfaz debe ser un archivo de origen, un espacio de nombres, una clase, una estructura, un módulo o una interfaz, y no puede ser un procedimiento o un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).

Las interfaces tienen como valor predeterminado acceso de confianza. Los niveles de acceso se pueden ajustar con los modificadores de acceso. Para obtener más información, vea Niveles de acceso en Visual Basic.

Reglas

  • Anidamiento de interfaces. Puede definir una interfaz dentro de otra. La interfaz externa se denomina interfaz que contiene y la interfaz interna se denomina interfaz anidada.

  • Declaración de miembros. Al declarar una propiedad o un procedimiento como miembro de una interfaz, solo se define la firma de esa propiedad o 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 problema, la definición de miembro usa solo una línea de código y las instrucciones de terminación, como o , no son válidas End Function End Property en una interfaz.

    Por el contrario, cuando se define una enumeración o estructura, o una clase o interfaz anidadas, es necesario incluir sus miembros de datos.

  • Modificadores de miembro. No se puede usar ningún modificador de acceso al definir miembros del módulo, ni se puede especificar Shared ni ningún modificador de procedimiento excepto Sobrecargas. Puede declarar cualquier miembro con Shadowsy puede usar Default al definir una propiedad, así como ReadOnly o WriteOnly.

  • Herencia. Si la interfaz usa la instrucción Inherits, puede especificar una o varias interfaces base. Puede heredar de dos interfaces incluso si cada una define un miembro con el mismo nombre. Si lo hace, el código de implementación debe usar la calificación de nombre 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 Public interfaz no puede heredar de una Friend interfaz.

    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 como se define en la interfaz .

    Cuando una clase implementa un procedimiento, no puede designar el procedimiento como Shared .

  • Propiedad predeterminada. 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 propiedad. Para especificar este tipo de propiedad, declará 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 interfaz tienen implícitamente acceso público. 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 tiene acceso a los miembros de clase a varAsInterface través de , todos ellos tienen acceso público. Sin embargo, si accede a los miembros a través varAsClass de , el procedimiento tiene acceso Sub doSomething privado.

  • Ámbito. Una interfaz está en el ámbito en todo su espacio de nombres, clase, estructura o módulo.

    El ámbito de cada miembro de interfaz es toda la interfaz.

  • Vida. Una interfaz no tiene una duración, ni sus miembros. Cuando una clase implementa una interfaz y se crea un objeto como una instancia de esa clase, el objeto tiene una duración dentro de la aplicación en la que se está ejecutando. Para obtener más información, vea "Lifetime" en Class Statement.

Ejemplo

En el ejemplo siguiente se usa Interface la instrucción para definir una interfaz denominada , que debe thisInterface implementarse con una instrucción y una Property Function instrucción .

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 Property las instrucciones y no presentan Function bloques que terminan con y End Property dentro de la interfaz End Function . La interfaz define solo las firmas de sus miembros. Los Property bloques y Function completos aparecen en una clase que implementa thisInterface .

Consulte también