Quelle différence une année ou deux peut apporter. Il y a deux ans et demi, je pensais écrire un livre intitulé Visual Basic 7 Unleashed pour Sams. Terminer les dernières ébauches de Sams Visual Basic .NET Unleashed me rappelle que beaucoup de choses ont changé dans Visual Basic.
Pour vous aider à faire la transition aussi complètement et aussi complètement que possible, moi-même et d’autres auteurs et contributeurs écrivons beaucoup sur le threading, la réflexion, les assemblées, l’interopérabilité COM et les délégués. Mais, en examinant récemment des sujets de programmation avec un ami, on m’a rappelé qu’il y avait des développeurs à tous les niveaux, pas seulement au niveau avancé. Pour être aussi approfondi que possible, j’explore donc des sujets avancés ainsi que des sujets non avancés. (J’accueille également les requêtes des lecteurs et j’écris parfois un article basé sur plusieurs requêtes.)
Cet article est au point. Dans cet article, nous examinerons les interfaces: comment les définir et comment les implémenter.
L’idée d’une interface n’est pas nouvelle dans COM, mais dans Visual Basic 6, chaque classe était une interface COM. En Visual Basic.NET chaque classe est une classe et une interface est une interface, mais pas une interface COM. Les classes existent depuis des décennies et les interfaces ne sont pas la seule compétence de COM. Une classe décrit les champs, propriétés, événements et méthodes qu’un type aura. Une interface ressemble plus à un portail ou à une pièce jointe. Une interface indique qu’un type implémentera ces méthodes spécifiques, mais ne définit pas ce qu’est un type. Par exemple, une maison peut avoir une fenêtre, mais une voiture aussi. Un type qui implémente une méthode ouverte peut être défini comme quelque chose qui a une fenêtre, mais les types peuvent définir des voitures, des bateaux, des maisons ou l’âme.
Visual Basic 6 ne prend pas en charge l’héritage ou les classes au sens orienté objet de la construction. VB6 prend en charge les interfaces COM. VB .NET, d’autre part, prend en charge les classes et les interfaces, il a donc fallu faire une distinction entre les deux idiomes.
Définition de classes et d’interfaces dans VB .NET
Les idiomes de classe et d’interface utilisent une syntaxe très similaire lorsque vous les définissez. L’exemple suivant définit une classe vide dans VB .NET, suivie d’une interface vide.Les classes
Public Class AClassEnd ClassPublic Interface AnInterfaceEnd Interface
peuvent contenir des champs, des propriétés, des événements et des méthodes. Ces éléments d’une classe, appelés membres, peuvent avoir des modificateurs indiquant qu’ils sont publics, privés, protégés ou amis. Tous les membres d’une déclaration d’interface sont publics et, par conséquent, n’ont pas besoin ni ne peuvent avoir de modificateurs d’accès.
Les classes contiennent du code ; pas les interfaces. Cependant, les classes qui implémentent une interface contiennent du code. Gardez à l’esprit qu’il n’y a pas d’instances d’interfaces dans VB.NET. Chaque instance est un type qui implémente une interface, mais n’est en soi pas une instance de l’interface. (À partir de ce moment, nous quitterons la discussion des classes pour une autre fois et nous nous concentrerons uniquement sur les interfaces.)
Implémentant des interfaces
En supposant que nous ayons une interface nommée AnInterface, nous ne pouvons ajouter que des déclarations de méthode à cette interface. En étendant l’interface de la section précédente, nous pouvons ajouter une méthode nommée WhoAmI. Le résultat est affiché ensuite.
Public Interface AnInterface Function WhoAmI() As StringEnd Interface
Tous les types qui implémentent l’interface AnInterface doivent implémenter chaque méthode déclarée dans cette interface. Dans cet exemple, il suffit d’implémenter la fonction WhoAmI. Supposons qu’AClass implémente AnInterface ; nous aurions besoin d’implémenter WhoAmI. Le résultat de l’implémentation d’AnInterface dans AClass donnerait le code suivant.
Public Class AClass Implements AnInterface Public Function WhoAmI() As String Implements AnInterface.WhoAmI Return "AClass" End FunctionEnd Class
La première chose que nous devons faire est d’indiquer que nous voulons implémenter l’interface par son nom. Implémente AnInterface indique aux consommateurs qu’AClass implémentera toutes les méthodes décrites dans AnInterface. (L’E Visual Studio .NET nous rappelle que nous devons le faire aussi.)
La différence entre VB6 et VB.NET est que nous devons ajouter la clause Implements au corps de la fonction comme indiqué dans la liste. La fonction est déclarée comme normale, mais la clause Implémente AnInterface.WhoAmI complète le contrat entre la classe et l’interface.
Pensées finales
Les structures peuvent implémenter des interfaces dans VB.NET aussi. Qu’une classe ou une structure implémente une interface, vous aurez besoin de l’instruction Implements comme démontré, et vous devrez implémenter chaque méthode définie dans l’interface en utilisant la clause Implements à la fin de l’en-tête de procédure pour indiquer qu’une méthode particulière satisfait une méthode d’interface particulière.
Les interfaces peuvent être très courtes ou très longues. Les méthodes décrites par une interface peuvent être des sous-programmes ou des fonctions, et elles peuvent être aussi élaborées ou aussi simples que vous en avez besoin. Une méthode peut implémenter plusieurs méthodes d’interfaces. Enfin, gardez à l’esprit que les méthodes d’interface peuvent être appelées avec une référence à l’objet ou avec une référence à l’interface.
À propos de l’auteur
Paul Kimmel est rédacteur indépendant pour Developer.com et CodeGuru.com . Recherchez des sujets sympas sur Visual Basic .Net dans son prochain livre Visual Basic .Net Unleashed disponible en janvier 2002.
Paul a fondé Software Conceptions, Inc. en 1990. Contactez Paul Kimmel à pour obtenir de l’aide dans la construction VB.NET applications ou migration d’applications VB6 vers .NET.
# # #