Instrucción Interface (Visual Basic)Interface Statement (Visual Basic)

Declara el nombre de una interfaz e introduce las definiciones de los miembros que incluye la interfaz.Declares the name of an interface and introduces the definitions of the members that the interface comprises.

SintaxisSyntax

[ <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  

ElementosParts

TérminoTerm DefiniciónDefinition
attributelist Opcional.Optional. Consulte lista de los atributos.See Attribute List.
accessmodifier Opcional.Optional. Puede ser uno de los siguientes:Can be one of the following:

- Public- Public
- protegido- Protected
- Friend- Friend
- privado- Private
- Protected Friend- Protected Friend
- Private protegida- Private Protected

Vea Access levels in Visual Basic.See Access levels in Visual Basic.
Shadows Opcional.Optional. Consulte sombras.See Shadows.
name Obligatorio.Required. Nombre de esta interfaz.Name of this interface. Vea Declared Element Names.See Declared Element Names.
Of Opcional.Optional. Especifica que se trata de una interfaz genérica.Specifies that this is a generic interface.
typelist Obligatorio si se usa el de palabra clave.Required if you use the Of keyword. Lista de parámetros de tipo para esta interfaz.List of type parameters for this interface. Opcionalmente, cada parámetro de tipo se puede declarar variante utilizando In y Out modificadores genéricos.Optionally, each type parameter can be declared variant by using In and Out generic modifiers. Consulte escriba lista.See Type List.
Inherits Opcional.Optional. Indica que esta interfaz hereda los atributos y miembros de otra interfaz o interfaces.Indicates that this interface inherits the attributes and members of another interface or interfaces. Consulte Inherits (instrucción).See Inherits Statement.
interfacenames Es obligatorio si se utiliza la instrucción Inherits.Required if you use the Inherits statement. Los nombres de las interfaces que esta interfaz se deriva.The names of the interfaces from which this interface derives.
modifiers Opcional.Optional. Modificadores adecuados para el miembro de interfaz que se está definiendo.Appropriate modifiers for the interface member being defined.
Property Opcional.Optional. Define una propiedad que sea miembro de la interfaz.Defines a property that is a member of the interface.
Function Opcional.Optional. Define un Function procedimiento que sea miembro de la interfaz.Defines a Function procedure that is a member of the interface.
Sub Opcional.Optional. Define un Sub procedimiento que sea miembro de la interfaz.Defines a Sub procedure that is a member of the interface.
Event Opcional.Optional. Define un evento que sea miembro de la interfaz.Defines an event that is a member of the interface.
Interface Opcional.Optional. Define una interfaz que está anidada dentro de esta interfaz.Defines an interface that is a nested within this interface. La definición de interfaz anidada debe finalizar con un End Interface instrucción.The nested interface definition must terminate with an End Interface statement.
Class Opcional.Optional. Define una clase que es un miembro de la interfaz.Defines a class that is a member of the interface. La definición de clase de miembro debe terminar con un End Class instrucción.The member class definition must terminate with an End Class statement.
Structure Opcional.Optional. Define una estructura que es un miembro de la interfaz.Defines a structure that is a member of the interface. La definición de estructura de miembro debe finalizar con un End Structure instrucción.The member structure definition must terminate with an End Structure statement.
membername Se requiere para cada propiedad, procedimiento, evento, interfaz, clase o estructura definida como un miembro de la interfaz.Required for each property, procedure, event, interface, class, or structure defined as a member of the interface. Nombre del miembro.The name of the member.
End Interface Termina la definición de Interface.Terminates the Interface definition.

ComentariosRemarks

Un interfaz define un conjunto de miembros, como las propiedades y los procedimientos que las clases y estructuras pueden implementar.An interface defines a set of members, such as properties and procedures, that classes and structures can implement. La interfaz define solo las firmas de los miembros y no sus mecanismos internos.The interface defines only the signatures of the members and not their internal workings.

Una clase o estructura implementa la interfaz proporcionando código para cada miembro definido por la interfaz.A class or structure implements the interface by supplying code for every member defined by the interface. Por último, cuando la aplicación crea una instancia de esa clase o estructura, un objeto existe y se ejecuta en la memoria.Finally, when the application creates an instance from that class or structure, an object exists and runs in memory. Para obtener más información, consulte objetos y clases y Interfaces.For more information, see Objects and Classes and Interfaces.

Interface solo se puede utilizar en un espacio de nombres o un nivel de módulo.You can use Interface only at namespace or module level. Esto significa que el contexto de declaración para 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 o bloque.This means the declaration context for an interface must be a source file, namespace, class, structure, module, or interface, and cannot be a procedure or block. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).For more information, see Declaration Contexts and Default Access Levels.

De forma predeterminada para las interfaces Friend acceso.Interfaces default to Friend access. Los niveles de acceso se pueden ajustar con los modificadores de acceso.You can adjust their access levels with the access modifiers. Para obtener más información, consulte tener acceso a los niveles en Visual Basic.For more information, see Access levels in Visual Basic.

ReglasRules

  • Anidar Interfaces.Nesting Interfaces. Puede definir una interfaz dentro de otra.You can define one interface within another. Se llama a la interfaz externa del que contiene la interfaz, y la interfaz interna se denomina un interfaz anidada.The outer interface is called the containing interface, and the inner interface is called a nested interface.

  • Declaración de miembro.Member Declaration. Cuando se declara una propiedad o procedimiento como miembro de una interfaz, está definiendo solo la firma de esa propiedad o ese procedimiento.When you declare a property or procedure as a member of an interface, you are defining only the signature of that property or procedure. Esto incluye el tipo de elemento (propiedad o procedimiento), sus parámetros y tipos de parámetro y su tipo de valor devuelto.This includes the element type (property or procedure), its parameters and parameter types, and its return type. Por este motivo, la definición de miembro utiliza sólo una línea de código y las instrucciones de terminación como End Function o End Property no son válidas en una interfaz.Because of this, the member definition uses only one line of code, and terminating statements such as End Function or End Property are not valid in an interface.

    En cambio, cuando se define una enumeración o estructura, o una clase anidada o interfaz, es necesario incluir a sus miembros de datos.In contrast, when you define an enumeration or structure, or a nested class or interface, it is necessary to include their data members.

  • Modificadores de miembros.Member Modifiers. No se puede usar cualquier modificador de acceso al definir miembros de módulo, ni se puede especificar Shared ni ningún modificador de procedimiento excepto sobrecargas.You cannot use any access modifiers when defining module members, nor can you specify Shared or any procedure modifier except Overloads. Puede declarar ningún miembro con sombras, y se puede usar predeterminado al definir una propiedad, así como ReadOnly o WriteOnly.You can declare any member with Shadows, and you can use Default when defining a property, as well as ReadOnly or WriteOnly.

  • Herencia.Inheritance. Si usa la interfaz de la Inherits Statement, puede especificar una o varias interfaces bases.If the interface uses the Inherits Statement, you can specify one or more base interfaces. Puede heredar de dos interfaces incluso si cada uno de ellos define un miembro con el mismo nombre.You can inherit from two interfaces even if they each define a member with the same name. Si lo hace, el código de implementación debe utilizar la calificación de nombres para especificar qué miembro se implementa.If you do so, the implementing code must use name qualification to specify which member it is implementing.

    Una interfaz no puede heredar de otra interfaz con un nivel de acceso más restrictivo.An interface cannot inherit from another interface with a more restrictive access level. Por ejemplo, un Public interfaz no puede heredar de un Friend interfaz.For example, a Public interface cannot inherit from a Friend interface.

    Una interfaz no puede heredar de una interfaz anidada dentro de él.An interface cannot inherit from an interface nested within it.

  • Implementación de.Implementation. Cuando una clase utiliza la implementa instrucción para implementar esta interfaz, debe implementar todos los miembros definidos dentro de la interfaz.When a class uses the Implements statement to implement this interface, it must implement every member defined within the interface. Además, cada firma en el código que implementa debe coincidir exactamente con la firma correspondiente definida en esta interfaz.Furthermore, each signature in the implementing code must exactly match the corresponding signature defined in this interface. Sin embargo, no tiene el nombre del miembro en el código de implementación para que coincida con el nombre del miembro tal como se define en la interfaz.However, the name of the member in the implementing code does not have to match the member name as defined in the interface.

    Cuando una clase que implementa un procedimiento, no puede designar el procedimiento como Shared.When a class is implementing a procedure, it cannot designate the procedure as Shared.

  • Propiedad predeterminada.Default Property. Una interfaz puede especificar a lo sumo una propiedad como su propiedad predeterminada, que puede hacer referencia sin usar el nombre de propiedad.An interface can specify at most one property as its default property, which can be referenced without using the property name. Esta propiedad se especifica mediante la declaración con el predeterminado modificador.You specify such a property by declaring it with the Default modifier.

    Tenga en cuenta que esto significa que una interfaz puede definir una propiedad predeterminada solo si no hereda ninguna.Notice that this means that an interface can define a default property only if it inherits none.

ComportamientoBehavior

  • Nivel de acceso.Access Level. Todos los miembros de interfaz tienen implícitamente pública acceso.All interface members implicitly have Public access. No se puede utilizar cualquier modificador de acceso al definir a un miembro.You cannot use any access modifier when defining a member. Sin embargo, una clase que implementa la interfaz puede declarar un nivel de acceso para cada miembro implementado.However, a class implementing the interface can declare an access level for each implemented member.

    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.If you assign a class instance to a variable, the access level of its members can depend on whether the data type of the variable is the underlying interface or the implementing class. Esto se ilustra en el siguiente ejemplo:The following example illustrates this.

    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, tienen acceso público.If you access class members through varAsInterface, they all have public access. Sin embargo, si tiene acceso a los miembros a través de varAsClass, Sub procedimiento doSomething tiene acceso privado.However, if you access members through varAsClass, the Sub procedure doSomething has private access.

  • Ámbito.Scope. Es una interfaz en el ámbito de su espacio de nombres, clase, estructura o módulo.An interface is in scope throughout its namespace, class, structure, or module.

    El ámbito de cada miembro de interfaz es toda la interfaz.The scope of every interface member is the entire interface.

  • Duración.Lifetime. Una interfaz no sí tiene una duración, ni tampoco a sus miembros.An interface does not itself have a lifetime, nor do its members. Cuando una clase implementa una interfaz y un objeto se crea como una instancia de que la clase, el objeto tiene una duración dentro de la aplicación en el que se está ejecutando.When a class implements an interface and an object is created as an instance of that class, the object has a lifetime within the application in which it is running. Para obtener más información, vea "Duración" en Class (instrucción).For more information, see "Lifetime" in Class Statement.

EjemploExample

En el ejemplo siguiente se usa el Interface instrucción para definir una interfaz denominada thisInterface, que debe implementarse con un Property instrucción y un Function instrucción.The following example uses the Interface statement to define an interface named thisInterface, which must be implemented with a Property statement and a Function statement.

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 el Property y Function instrucciones no crea nuevos bloques que terminan con End Property y End Function dentro de la interfaz.Note that the Property and Function statements do not introduce blocks ending with End Property and End Function within the interface. La interfaz define solo las firmas de sus miembros.The interface defines only the signatures of its members. El completo Property y Function bloques aparecen en una clase que implementa thisInterface.The full Property and Function blocks appear in a class that implements thisInterface.

Vea tambiénSee also