web-dev-qa-db-fra.com

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

Qu'est-ce qu'un module exactement? Quelle est la différence entre un module, une classe et une fonction? Comment accéder à un module en C #?

Je pose cette question parce que je veux calculer une somme de contrôle du code IL de seulement certaines fonctions particulières, lors de l'exécution (sans utiliser la signature de code).

51
Pushkar

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

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

Oui, vous pouvez accéder aux assemblages, modules, classes, fonctions, propriétés, champs, etc. via la réflexion lors de l'exécution.

52
OJ.

En complément des autres réponses:

Le MSDN indique que: "Un module est un fichier Microsoft en langage intermédiaire (MSIL) 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: Trouvé un meilleure description des Netmodules et pourquoi vous les voudriez.

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

10
PHeiberg

Un fichier

Voilà ce qu'est un module.

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

(Où VES est un programme qui lit l'assembly .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 Assembly 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 à l'intérieur du fichier (module) lui-même.

5
Alexander Bird

Il existe également une instruction VB "module" 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 avec quelques distinctions importantes. Chaque module a exactement une instance et n'a pas besoin d'être créé ou affecté à une variable. Les modules ne prennent pas en charge l'héritage ou n'implémentent pas d'interfaces. Notez qu'un module n'est pas un type dans le sens où une classe ou une structure l'est - vous ne pouvez pas déclarer qu'un élément de programmation a le type de données d'un module.

Vous ne pouvez utiliser le 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 n'importe quel type. Pour plus d'informations, voir Contextes de déclaration et niveaux d'accès 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 des durées de vie égales à celles du programme.

Les modules utilisent par défaut l'accès Friend. Vous pouvez ajuster leurs niveaux d'accès avec les modificateurs d'accès. Pour plus d'informations, consultez Niveaux d'accès dans Visual Basic.

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

Dans les modules courts en VB sont des analogues pour les classes statiques C #

1
SENya