Le mot-clé Module dans VB.NET existe principalement pour la compatibilité avec VB6 et les versions antérieures. À l'époque, la plupart des codes VB étaient procéduraux et comportaient des fonctions et des sous-classes autonomes. La langue a acquis le mot-clé Class autour de VB4. Pas de vraies classes au sens de la POO, elle ne supportait pas l'héritage. Une fonctionnalité manquante dans l'architecture COM sous-jacente.
Il ne s'adapte pas très bien au modèle d'exécution fourni par le CLR. Il n'y a pas de support pour les fonctions libres, chaque méthode doit être membre d'une classe. Le compilateur VB.NET émule des modules en déclarant une classe, les procédures de module deviennent des méthodes partagées de cette classe. Vous pouvez le voir avec Ildasm.exe:
.class private auto ansi sealed ConsoleApplication1.Module1
extends [mscorlib]System.Object
{
.custom instance void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute::.ctor() = (01 00 00 00)
} // end of class ConsoleApplication1.Module1
Notez comment il est privé, de sorte que le code ne peut pas obtenir une référence, et scellé, de sorte qu'aucun code peut dériver une classe à partir d'un module.
Le compilateur C# ne exactement la même chose avec une « classe statique », le CLR ne dispose pas d'une notion de classes statiques non plus. Il y a beaucoup de bonnes raisons pour les classes statiques, l'idée de "Module" n'est pas obsolète. Vous pouvez accomplir la même chose en déclarant une classe NotInheritable dans le code VB.NET, n'ayant que des méthodes partagées. Le compilateur VB.NET n'applique cependant pas les méthodes à partager comme le compilateur C# et ne vous permet pas de déclarer la classe privée. En tant que tel, un module est très bien.
Nous vous remercions de votre réponse.Je n'ai même jamais entendu parler des méthodes d'extension, mais je vois qu'elles ne peuvent SE FAIRE qu'en modules, et bien que cela réponde à ma question, j'étais plus préoccupé par la structure des programmes et l'utilisation des modules. –