Qué diferencia puede traer uno o dos años. Hace dos años y medio pensé que escribiría un libro titulado Visual Basic 7 Unleashed para Sams. Completar los borradores finales de Sams Visual Basic. NET Unleashed me recuerda que mucho ha cambiado en Visual Basic.
Para ayudarlo a hacer la transición lo más completa y completa posible, yo y otros autores y colaboradores estamos escribiendo mucho sobre hilos, reflexión, asambleas, interacción de COM y delegados. Pero, al revisar temas de programación con un amigo recientemente, me recordaron que hay desarrolladores en todos los niveles, no solo en el nivel avanzado. Para ser lo más minucioso posible, entonces, estoy explorando temas avanzados y no avanzados. (También doy la bienvenida a las consultas de los lectores, y a veces escribo un artículo basado en varias consultas.)
Este artículo va al grano. En este artículo examinaremos las interfaces: cómo definirlas y cómo implementarlas.
La idea de una interfaz no es nueva para COM, pero en Visual Basic 6 cada clase era una interfaz COM. En Visual Basic .NET cada clase es una clase y una interfaz es una interfaz, pero no una interfaz COM. Las clases han existido durante décadas y las interfaces no son el único ámbito de competencia de COM. Una clase describe los campos, propiedades, eventos y métodos que tendrá un tipo. Una interfaz es más como un portal o un archivo adjunto. Una interfaz dice que un tipo implementará estos métodos específicos, pero no define qué es un tipo. Por ejemplo, una casa puede tener una ventana, pero también un automóvil. Un tipo que implementa un método abierto podría definirse como algo que tiene una ventana, pero los tipos podrían definir automóviles, barcos, casas o el alma.
Visual Basic 6 no admite herencia o clases en el sentido orientado a objetos de la construcción. VB6 admite interfaces COM. VB. NET, por otro lado, admite clases e interfaces, por lo que se tuvo que hacer una distinción entre los dos modismos.
Definir clases e interfaces en VB. NET
Los modismos de clase e interfaz utilizan una sintaxis muy similar cuando los define. El siguiente ejemplo define una clase vacía en VB. NET, seguida de una interfaz vacía.
Public Class AClassEnd ClassPublic Interface AnInterfaceEnd Interface
las Clases pueden contener campos, propiedades, eventos y métodos. Estos elementos de una clase, llamados miembros, pueden tener modificadores que indican que son públicos, privados, protegidos o amigos. Todos los miembros de una declaración de interfaz son públicos y, como resultado, no necesitan ni pueden tener modificadores de acceso.
Las clases contienen código; las interfaces no. Sin embargo, las clases que implementan una interfaz sí contienen código. Tenga en cuenta que no hay instancias de interfaces en VB .NET. Cada instancia es un tipo que implementa una interfaz, pero no es en sí una instancia de la interfaz. (A partir de este punto, dejaremos la discusión de las clases para otro momento y nos centraremos solo en las interfaces.)
Implementando interfaces
Asumiendo que tenemos una interfaz llamada Interfaz, solo podemos agregar declaraciones de métodos a esa interfaz. Extendiendo la interfaz de la sección anterior, podemos agregar un método llamado WhoAmI. El resultado se muestra a continuación.
Public Interface AnInterface Function WhoAmI() As StringEnd Interface
Todos los tipos que implementan la interfaz de interfaz deben implementar todos los métodos declarados en esa interfaz. En este ejemplo solo necesitamos implementar la función WhoAmI. Supongamos que AClass implementa una interfaz; necesitaríamos implementar WhoAmI. El resultado de implementar una interfaz en AClass produciría el siguiente código.
Public Class AClass Implements AnInterface Public Function WhoAmI() As String Implements AnInterface.WhoAmI Return "AClass" End FunctionEnd Class
Lo primero que tenemos que hacer es indicar que queremos implementar la interfaz por nombre. Implementa una interfaz le dice a los consumidores que AClass implementará todos los métodos descritos en una interfaz. (El IDE. NET de Visual Studio nos recuerda que también tenemos que hacerlo.)
La diferencia entre VB6 y VB .NET es que tenemos que añadir la cláusula Implements al cuerpo de la función como se muestra en el listado. La función se declara como normal, pero la cláusula implementa una interfaz.WhoAmI completa el contrato entre la clase y la interfaz.
Pensamientos finales
Las estructuras pueden implementar interfaces en VB.NET también. Ya sea que una clase o una estructura esté implementando una interfaz, necesitará la instrucción Implements como se ha demostrado, y necesitará implementar cada método definido en la interfaz utilizando la cláusula Implements al final del encabezado del procedimiento para indicar que un método en particular satisface un método de interfaz en particular.
Las interfaces pueden ser muy cortas o muy largas. Los métodos descritos por una interfaz pueden ser subrutinas o funciones, y pueden ser tan elaborados o simples como sea necesario. Un método puede implementar más de un método de interfaces. Por último, tenga en cuenta que los métodos de interfaz se pueden llamar con una referencia al objeto o con una referencia a la interfaz.
Sobre el autor
Paul Kimmel es un escritor independiente para Developer.com y CodeGuru.com. Busque temas interesantes de Visual Basic. Net en su próximo libro Visual Basic. net Unleashed disponible en enero de 2002.
Paul fundó Software Conceptions, Inc. en 1990. Póngase en contacto con Paul Kimmel en para obtener ayuda para construir VB.NET aplicaciones o migración de aplicaciones VB6 a. NET.
# # #