Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Librairie de classes : pb de conception

6 réponses
Avatar
Jack06
Bonjour,
j'ai créé une librairie de classes contenant une dizaine de modules de
classes. Voici mon probleme : j'ai besoin de créer des énumérations et
des structures qui ne sont liées à aucune classe en particulier (ou,
autrement dit, qui sont communes à toutes les classes) mais qui doivent
etre accessibles à n'importe quelle module de classe de la librairie.
A quel endroit et comment définir ces structures ?

Merci de votre aide.

Jack

6 réponses

Avatar
Mathieu Francesch
Bonjour Jack,

Vous pouvez ajouter un Module à votre Class Library dans lequel vous créez
vos différentes structures et énumérations qui auront Public pour
modificateur d'accès.

Cela vous convient-il ?


--
Cordialement,

Mathieu Francesch



"Jack06" a écrit :

Bonjour,
j'ai créé une librairie de classes contenant une dizaine de modules de
classes. Voici mon probleme : j'ai besoin de créer des énumérations et
des structures qui ne sont liées à aucune classe en particulier (ou,
autrement dit, qui sont communes à toutes les classes) mais qui doivent
etre accessibles à n'importe quelle module de classe de la librairie.
A quel endroit et comment définir ces structures ?

Merci de votre aide.

Jack



Avatar
Jack06
J'ai testé la création d'un module comme tu l'indiques, mais ça marche
pas. Mais j'ai réussi à trouver : en fait, il faut ajouter une classe,
supprimer le code Public Class / End Class et mettre à la place Public
Enum et ça marche impec.
Merci pour ton aide.
Avatar
Mathieu Francesch
Bonjour Jack,

Pour ma curiosité, qu'est ce que cela vous génère comme erreur lorsque vous
utilisez un module ? J'ai testé et apparement cela fonctionne ...

Exemple avec un module :

Module Echelon
Enum Niveau
bon = 1
moyen = 2
mauvais = 3
End Enum
End Module

Public Class Eleve
Public Function F_GET_NIVEAU_BON() As Integer
Return Niveau.bon
End Function
End Class

Autrement avec une classe cela donnerait ceci :

Public Class Echelon
Public Enum Niveau
bon = 1
moyen = 2
mauvais = 3
End Enum
End Class

Public Class Eleve
Public Function F_GET_NIVEAU_BON() As Echelon.Niveau
Return Echelon.Niveau.bon
End Function
End Class

Merci pour votre information.

--
Cordialement,

Mathieu Francesch



"Jack06" a écrit :

J'ai testé la création d'un module comme tu l'indiques, mais ça marche
pas. Mais j'ai réussi à trouver : en fait, il faut ajouter une classe,
supprimer le code Public Class / End Class et mettre à la place Public
Enum et ça marche impec.
Merci pour ton aide.



Avatar
Jack06
Voici ce qui ne marchait pas : j'avais ajouté un module (clic droit sur
mon projet, option "Add Module...") avec mes énumérations :
Module Structures
Public Enum Ressources
option1
option2
option3
End Enum
End Module

Ensuite, dans ma classe :
Public Class MaClasse
Public Property RquiredRes() as Ressources
' le code
End Property

Là, RequiredRes était souligné en bleu avec l'erreur suivante :
"'RequiredRes' ne peut pas exposer le type Ressources en dehors du
projet au travers de la classe MaClasse."

La solution : après clic droit sur mon projet, j'ai fait "Add Class..."
(et non pas Add Module...), et j'ai supprimé les lignes Public Class
Class1 / End Class. J'ai ensuite directement mis mes énumérations :
Public Enum Ressources
option1
option2
option3
End Enum

Je n'ai pas créé de classe Ressources, comme indiqué dans ton exemple.

Et ça marche impec.
Voilà.
Avatar
Fred
dans : news:44de1dc3$0$18499$,
Jack06 écrivait :


Je n'ai pas créé de classe Ressources, comme indiqué dans ton exemple.

Et ça marche impec.
Voilà.



Bonsoir,

Extrait de la doc pour Enum

Declaration Context. An enumeration declared at module level, outside
any procedure, is a member enumeration; it is a member of the class,
structure, module, or interface that declares it.
An enumeration declared at namespace level, outside any class,
structure, module, or interface, is a member only of the namespace in
which it appears.

Autrement dit, si ton Enum doit être visible par plusieurs classes d'un
même espace de nom, il faut la déclarer au niveau de ce namespace.

Ce que tu as fait en supprimant la déclaration de classe d'un nouveau
fichier vb dans le même projet.
Tous les fichiers d'un même projet sont par défaut inclus dans le
namespace du projet.

Tu pouvais donc également déclarer ton Enum dans n'importe lesquel de
tes fichier vb mais *en dehors* de la déclaration de classe.

Au passage, il n'y pas équivalence entre fichier et classe/module. Tu
peux très bien dans un même fichier regrouper plusieurs classes.
Et maintenant avec vs 2005, il est même possible de faire le contraire :
une classe répartie dans plusieurs fichiers avec la notion de classe
partielle. C'est entre autre utilisé par le designer qui génère
automatiquement des fichiers form.designer.vb pour chaune des forms
créés.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Jack06
OK. Merci de ces précisions.