Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las interfaces definen las propiedades, los métodos y los eventos que las clases pueden implementar. Las interfaces permiten definir características como pequeños grupos de propiedades, métodos y eventos estrechamente relacionados; Esto reduce los problemas de compatibilidad porque puede desarrollar implementaciones mejoradas para las interfaces sin poner en peligro el código existente. Puede agregar nuevas características en cualquier momento mediante el desarrollo de interfaces e implementaciones adicionales.
Hay otras razones por las que es posible que quiera usar interfaces en lugar de la herencia de clases:
Las interfaces son más adecuadas para situaciones en las que las aplicaciones requieren muchos tipos de objetos posiblemente no relacionados para proporcionar cierta funcionalidad.
Las interfaces son más flexibles que las clases base porque puede definir una sola implementación que pueda implementar varias interfaces.
Las interfaces son mejores en situaciones en las que no es necesario heredar la implementación de una clase base.
Las interfaces son útiles cuando no se puede usar la herencia de clases. Por ejemplo, las estructuras no pueden heredar de clases, pero pueden implementar interfaces.
Declarar interfaces
Las definiciones de interfaz se incluyen dentro de las Interface
instrucciones y las End Interface
instrucciones. Después de la Interface
instrucción , puede agregar una instrucción opcional Inherits
que muestre una o varias interfaces heredadas. Las instrucciones Inherits
deben preceder a todas las demás instrucciones de la declaración a excepción de los comentarios. Las instrucciones restantes de la definición de interfaz deben ser Event
, Sub
, Function
, Property
, Interface
, Class
, Structure
y Enum
. Las interfaces no pueden contener ningún código de implementación o instrucciones asociados al código de implementación, como End Sub
o End Property
.
En un espacio de nombres, las instrucciones de interfaz son Friend
de forma predeterminada, pero también se pueden declarar explícitamente como Public
o Friend
. Las interfaces definidas dentro de clases, módulos, interfaces y estructuras son Public
de forma predeterminada, pero también se pueden declarar explícitamente como Public
, Friend
, Protected
o Private
.
Nota:
La Shadows
palabra clave se puede aplicar a todos los miembros de la interfaz. La palabra clave Overloads
se puede aplicar a Sub
, Function
y a Property
instrucciones declaradas en una definición de interfaz. Además, las declaraciones Property
pueden tener los modificadores Default
, ReadOnly
o WriteOnly
. No se permite ninguno de los otros modificadores—Public
, Private
, Friend
, Protected
, Shared
, Overrides
, MustOverride
o Overridable
. Para obtener más información, vea Contextos de declaración y Niveles de acceso predeterminados.
Por ejemplo, el código siguiente define una interfaz con una función, una propiedad y un evento.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Implementar interfaces
La palabra Implements
reservada de Visual Basic se usa de dos maneras. La Implements
instrucción indica que una clase o estructura implementa una interfaz. La Implements
palabra clave indica que un miembro de clase o un miembro de estructura implementa un miembro de interfaz específico.
Implements (Instrucción)
Si una clase o estructura implementa una o varias interfaces, debe incluir la Implements
instrucción inmediatamente después de la Class
instrucción o Structure
. La Implements
instrucción requiere que una clase implemente una lista separada por comas de interfaces. La clase o estructura debe implementar todos los miembros de la interfaz mediante la Implements
palabra clave .
Implements (palabra clave)
La Implements
palabra clave requiere que se implemente una lista separada por comas de miembros de interfaz. Por lo general, solo se especifica un solo miembro de interfaz, pero puede especificar varios miembros. La especificación de un miembro de interfaz consta del nombre de la interfaz, que debe especificarse en una instrucción implements dentro de la clase ; un período; y el nombre de la función miembro, propiedad o evento que se va a implementar. El nombre de un miembro que implementa un miembro de interfaz puede usar cualquier identificador legal y no se limita a la InterfaceName_MethodName
convención usada en versiones anteriores de Visual Basic.
Por ejemplo, el código siguiente muestra cómo declarar una subrutina denominada Sub1
que implementa un método de una interfaz:
Class Class1
Implements interfaceclass.interface2
Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
End Sub
End Class
Los tipos de parámetro y los tipos devueltos del miembro implementador deben coincidir con la declaración de miembro o de propiedad de interfaz de la interfaz. La manera más común de implementar un elemento de una interfaz es con un miembro que tiene el mismo nombre que la interfaz, como se muestra en el ejemplo anterior.
Para declarar la implementación de un método de interfaz, puede usar los atributos que sean legales en las declaraciones de método de instancia, incluidas Overloads
, Overrides
, Overridable
, Public
, Private
, Protected
, Friend
, Protected Friend
, MustOverride
, Default
y Static
. El Shared
atributo no es legal, ya que define una clase en lugar de un método de instancia.
Con Implements
, también puede escribir un único método que implemente varios métodos definidos en una interfaz, como en el ejemplo siguiente:
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
Se puede usar un miembro privado para implementar un miembro de interfaz. Cuando un miembro privado implementa un miembro de una interfaz, ese miembro estará disponible a través de la interfaz aunque no esté disponible directamente en variables de objeto para la clase.
Ejemplos de implementación de interfaz
Las clases que implementan una interfaz deben implementar todas sus propiedades, métodos y eventos.
En el ejemplo siguiente se definen dos interfaces. La segunda interfaz, Interface2
, hereda Interface1
y define una propiedad y un método adicionales.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
' Demonstrates interface inheritance.
Interface Interface2
Inherits Interface1
Sub M1(ByVal y As Integer)
ReadOnly Property Num() As Integer
End Interface
En el ejemplo siguiente se implementa Interface1
, la interfaz definida en el ejemplo anterior:
Public Class ImplementationClass1
Implements Interface1
Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
' Insert code here to implement this method.
End Sub
End Class
En el ejemplo final se implementa Interface2
, incluido un método heredado de Interface1
:
Public Class ImplementationClass2
Implements Interface2
Dim INum As Integer = 0
Sub sub1(ByVal i As Integer) Implements Interface2.sub1
' Insert code here that implements this method.
End Sub
Sub M1(ByVal x As Integer) Implements Interface2.M1
' Insert code here to implement this method.
End Sub
ReadOnly Property Num() As Integer Implements Interface2.Num
Get
Num = INum
End Get
End Property
End Class
Puede implementar una propiedad de solo lectura con una propiedad de lectura y escritura (es decir, no tiene que declararla de solo lectura en la clase implementadora). Al implementar una interfaz, se implementarán al menos los miembros que declara la interfaz, pero se puede ofrecer más funcionalidad como, por ejemplo, permitir que se pueda escribir en la propiedad.
Temas relacionados
Título | Descripción |
---|---|
Tutorial: Creación e implementación de interfaces | Proporciona un procedimiento detallado que le lleva a través del proceso de definición e implementación de su propia interfaz. |
Varianza en interfaces genéricas | Describe la covarianza y la contravarianza en interfaces genéricas y proporciona una lista de interfaces genéricas variantes en .NET Framework. |