Interfaces (Visual Basic)
Las Interfaces definen las propiedades, métodos y eventos que pueden implementar las clases. Las interfaces le permiten definir características como grupos pequeños de propiedades, métodos y eventos estrechamente relacionados; de esta forma se reducen los problemas de compatibilidad, ya que pueden desarrollarse implementaciones mejoradas para las interfaces sin poner en peligro el código existente. Se pueden agregar nuevas características en cualquier momento, mediante el desarrollo de implementaciones e interfaces adicionales.
Existen otras razones por las que se podría desear utilizar interfaces en lugar de la herencia de clases:
Las interfaces admiten mejor las situaciones en las cuales las aplicaciones necesitan el mayor número de tipos de objetos no relacionados posible para proporcionar determinadas funciones.
Las interfaces son más flexibles que las clases de base, porque puede definir una única implementación que puede implementar interfaces múltiples.
Las interfaces son mejores en situaciones en las que no es necesario heredar una implementación de una clase de base.
Las interfaces son útiles cuando no se puede usar la herencia de clases. Por ejemplo, las estructuras no pueden heredarse de las clases, pero pueden implementar interfaces.
Declarar las interfaces
Las definiciones de interfaz se encuentran dentro de las instrucciones Interface y End Interface. Después de la instrucción Interface, puede agregar una instrucción Inherits opcional que proporciona una lista de una o varias interfaces heredadas. Las instrucciones Inherits deben ir antes que el resto de instrucciones de una declaración, a excepción de los comentarios. El resto de instrucciones de una definición de interfaz deberían ser instrucciones Event, Sub, Function, Property, Interface, Class, Structure y Enum. Las interfaces no pueden contener código de implementación ni instrucciones asociadas a código de implementación, como End Sub o End Property.
En un espacio de nombres, las instrucciones de interfaz son de manera predeterminada Friend, pero también se pueden declarar explícitamente como Public o Friend. Las interfaces definidas dentro de las clases, módulos, interfaces y estructuras son de manera predeterminada Public, pero también se pueden declarar explícitamente como Public, Friend, Protected o Private.
Nota
La palabra clave Shadows se puede aplicar a todos los miembros de la interfaz. La palabra clave Overloads se puede aplicar a las instrucciones declaradas Sub, Function y Property en la definición de una interfaz. Además, las instrucciones Property pueden tener los modificadores Default, ReadOnly o WriteOnly. No se permite ninguno del resto de los 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 (Visual Basic).
Por ejemplo, en el código siguiente se 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 reservada Implements de Visual Basic se usa de dos formas. La instrucción Implements significa que una clase o estructura implementa una interfaz. La palabra clave Implements significa que un miembro de clase o de estructura implementa un miembro de interfaz específico.
Implements (Instrucción)
Si una clase o estructura implementa una o más interfaces, debe incluir la instrucción Implements inmediatamente después de la instrucción Class o Structure. La instrucción Implements exige que una lista separada por comas de interfaces sea implementada por una clase. La clase o estructura debe implementar todos los miembros de interfaz mediante la palabra clave Implements.
La palabra clave Implements
La palabra clave Implements requiere una lista separada por comas de los miembros de la interfaz que deben implementarse. Por lo general, se especifica solamente un único miembro de interfaz, pero se pueden 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 punto y el nombre del evento, propiedad o función miembro que debe implementarse. El nombre de un miembro que implementa un miembro de interfaz puede utilizar cualquier identificador permitido y no se limita a la convención InterfaceName_MethodName que se utilizaba en las 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 de valores devueltos del miembro que realiza la implementación deben coincidir con la propiedad de interfaz o la declaración de miembro de la interfaz. La forma más habitual de implementar un elemento de una interfaz es con un miembro que tenga 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 utilizar cualquier atributo permitido en las declaraciones de método de instancia, incluidos Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default y Static. El atributo Shared no está permitido, ya que define una clase en lugar de un método de instancia.
Con Implements también puede crear 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
Puede utilizar un miembro privado para implementar un miembro de interfaz. Cuando un miembro privado implementa un miembro de una interfaz, el miembro pasa a estar disponible por medio de la interfaz, aunque no está disponible directamente en las variables de objeto para la clase.
Ejemplos de implementación de interfaces
Las clases que implementan una interfaz deben implementar todas sus propiedades, métodos y eventos.
El ejemplo siguiente define dos interfaces. La segunda interfaz, Interface2, hereda Interface1 y define un método y una propiedad adicional.
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
El ejemplo siguiente 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
El ejemplo final implementa Interface2, incluyendo 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
Temas relacionados
Título |
Descripción |
---|---|
Proporciona un procedimiento detallado que le conduce a través del proceso de definición e implementación de su propia interfaz. |
|
Se describe la covarianza y la contravarianza en las interfaces genéricas y se proporciona una lista de interfaces genéricas variantes en .NET Framework. |