Qu’est-ce qu’un module dans .NET?

Qu’est-ce qu’un module? Quelle est la différence entre un module, une classe et une fonction? Comment puis-je accéder à un module dans c # .net?

UPDATE: Je demande cela parce que, sans utiliser la signature de code, je veux calculer une sum de contrôle du code IL de certaines fonctions seulement (au moment de l’exécution).

Un module est une collection logique de code dans un assemblage. Vous pouvez avoir plusieurs modules à l’intérieur d’un assemblage et chaque module peut être écrit dans différents langages .NET (à ma connaissance, les VS ne prennent pas en charge la création d’assemblages multi-modules).

Les assemblages contiennent des modules. Les modules contiennent des classes. Les classes contiennent des fonctions.

Oui, vous pouvez accéder aux assemblages, aux modules, aux classes, aux fonctions, aux propriétés, aux champs, etc. via la reflection à l’exécution.

En complément des autres réponses:

Le MSDN indique que: “Un module est un fichier MSIL (Microsoft Intermediate Language) qui n’a pas de manifeste d’assembly.”.

Les modules peuvent être “liés” ensemble en générant un manifeste d’assembly à l’aide de l’utilitaire Assembly Linker (al.exe). Si je m’en souviens bien, le CLR peut charger des modules individuels pour un assemblage, de sorte que seuls les modules nécessaires soient chargés.

EDIT: Vous avez trouvé une meilleure description des Netmodules et pourquoi vous les voulez.

Il y a une autre question sur SO qui concerne le sujet de la sum de contrôle. Les réponses mentionnent l’utilisation de la méthode GetILAsByteArray pour obtenir l’IL.

Un fichier

C’est ce qu’un module est.

module: A single file containing content that can be executed by the VES 

(Où VES est un programme qui lit l’assemblage .NET et le convertit en code machine.) Voir http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf Partition I page 16.

Un assemblage est une collection cohérente de fichiers dans le système de fichiers (modules). Voir http://msdn.microsoft.com/en-us/library/zst29sk2(vs.71).aspx

De toute évidence, les définitions de classe sont définies dans le fichier (module) lui-même.

Il y a aussi une instruction “module” VB qui n’est pas liée aux assemblys et aux éléments de compilation et est similaire à la classe statique C #:

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/module-statement

Une instruction Module définit un type de référence disponible dans son espace de noms. Un module (parfois appelé module standard) est similaire à une classe mais comporte des distinctions importantes. Chaque module a exactement une instance et n’a pas besoin d’être créé ou assigné à une variable. Les modules ne prennent pas en charge les interfaces d’inheritance ou d’implémentation. Notez qu’un module n’est pas un type dans le sens où une classe ou une structure est – vous ne pouvez pas déclarer un élément de programmation pour avoir le type de données d’un module.

Vous ne pouvez utiliser Module qu’au niveau de l’espace de noms. Cela signifie que le contexte de déclaration d’un module doit être un fichier source ou un espace de noms et ne peut pas être une classe, une structure, un module, une interface, une procédure ou un bloc. Vous ne pouvez pas imbriquer un module dans un autre module ou dans un type quelconque. Pour plus d’informations, voir Contextes de déclaration et Niveaux d’access par défaut.

Un module a la même durée de vie que votre programme. Parce que ses membres sont tous partagés, ils ont également une durée de vie égale à celle du programme.

Les modules par défaut sont l’access ami. Vous pouvez ajuster leurs niveaux d’access avec les modificateurs d’access. Pour plus d’informations, voir Niveaux d’access dans Visual Basic.

Tous les membres d’un module sont implicitement partagés.

En bref les modules en VB sont des analogues pour les classes statiques C #