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

Valeur de propriété à type variable

3 réponses
Avatar
Gilbert Tordeur
Bonjour,

J'écris une dll en VB2005 (je pourrais l'écrire en VB2008 si besoin), dont
le but est de lire tous les paramètres d'exécution d'un programme à partir
d'une table de base de données.

En gros, la table contient les champs suivants :
- nom du programme (varchar)
- clé du paramètre (int)
- description du paramètre (varchar)
- type du paramètre (varchar)
- valeur du paramètre (varchar)

Le type du paramètre indique si sa valeur est par exemple un Integer, un
String, un Char, un Boolean, un Array of Integer, etc.

Chacun des paramètres est chargé dans une classe ParametreProgramme, dont
les 5 propriétés ReadOnly permettent de lire les valeurs des champs énumérés
ci-dessus.

Un programme pouvant avoir plusieurs paramètres, une classe Programme
fournit une propriété ParametresProgramme qui est une collection de
ParametreProgramme.

Chaque programme appelle la dll pour lire ses paramètres. Il pourrait bien
sûr recevoir systématriquement une valeur String, à charge pour lui de
convertir dans le type adéquat. Je préfèrerais que ce soit la dll qui fasse
la conversion, pour renvoyer soit un Integer, soit un String, soit un Char,
etc. en fonction de son type. Problème, VB2005 refuse de surcharger une
propriété dont seuls les types de retour sont différents. Je pourrais
multiplier les propriétés : ValueInteger, ValueString, ValueChar, etc., mais
c'est fastidieux, lourd et inélégant.

Quelqu'un a-t-il mieux à proposer ?

Merci d'avance,
Gilbert

3 réponses

Avatar
Gilles TOURREAU [MVP]
"Gilbert Tordeur" a écrit dans le message de
news:
Bonjour,

J'écris une dll en VB2005 (je pourrais l'écrire en VB2008 si besoin), dont
le but est de lire tous les paramètres d'exécution d'un programme à partir
d'une table de base de données.

En gros, la table contient les champs suivants :
- nom du programme (varchar)
- clé du paramètre (int)
- description du paramètre (varchar)
- type du paramètre (varchar)
- valeur du paramètre (varchar)

Le type du paramètre indique si sa valeur est par exemple un Integer, un
String, un Char, un Boolean, un Array of Integer, etc.

Chacun des paramètres est chargé dans une classe ParametreProgramme, dont
les 5 propriétés ReadOnly permettent de lire les valeurs des champs
énumérés ci-dessus.

Un programme pouvant avoir plusieurs paramètres, une classe Programme
fournit une propriété ParametresProgramme qui est une collection de
ParametreProgramme.

Chaque programme appelle la dll pour lire ses paramètres. Il pourrait bien
sûr recevoir systématriquement une valeur String, à charge pour lui de
convertir dans le type adéquat.



Ok, mais il faudra à la lecteur convertir la valeur chaine obtenu du SGBD en
une valeur .NET (int, float, string...etc)

Je préfèrerais que ce soit la dll qui fasse la conversion, pour renvoyer
soit un Integer, soit un String, soit un Char, etc. en fonction de son
type.
Problème, VB2005 refuse de surcharger une propriété dont seuls les types
de retour sont différents. Je pourrais multiplier les propriétés :
ValueInteger, ValueString, ValueChar, etc., mais c'est fastidieux, lourd
et inélégant.



Vous n'aurez pas le choix de faire une unique propriété qui retourne un
objet pour être le plus générique possible :

Public ReadOnly Property Valeur() As Object
Get
Return ...
End Get
End Property

Il faudra juste caster au moment de la lecture de celle-ci...

Dim val As Integer;
val = CType(MaPropriété.Valeur, Int)


Quelqu'un a-t-il mieux à proposer ?

Merci d'avance,
Gilbert




Cordialement

--
Gilles TOURREAU - MVP C#


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Patrice
Si je comprends bien peut-être en regardant du coté des Generics en
VB2008 (ce qui permettrait d'exposer sans doute le type du paramètre
ainsi qu'une fonction à laquelle on passe son type :
MyParameter.GetValue(MyParameter.Type) par exemple...

Si c'est pour lire dans un programme spécifique je typerais fortement
le tout à la base (MySettings.Title, MySettings.PageSize avec une
propriété par paramètre de fonctionnement etc...) . Sinon on peut
creuser l'approche ci-dessus si c'est plutôt un programme généraliste
qui lit pour info des paramètres exploités par d'autres
applications...

--
Patrice
Avatar
Gilbert Tordeur
Merci, je vais creuser tout ceci. Et mes excuses pour le retard dû à une
petite indisponibilité.
Gilbert


"Gilbert Tordeur" a écrit dans le message de news:

Bonjour,

J'écris une dll en VB2005 (je pourrais l'écrire en VB2008 si besoin), dont
le but est de lire tous les paramètres d'exécution d'un programme à partir
d'une table de base de données.

En gros, la table contient les champs suivants :
- nom du programme (varchar)
- clé du paramètre (int)
- description du paramètre (varchar)
- type du paramètre (varchar)
- valeur du paramètre (varchar)

Le type du paramètre indique si sa valeur est par exemple un Integer, un
String, un Char, un Boolean, un Array of Integer, etc.

Chacun des paramètres est chargé dans une classe ParametreProgramme, dont
les 5 propriétés ReadOnly permettent de lire les valeurs des champs
énumérés ci-dessus.

Un programme pouvant avoir plusieurs paramètres, une classe Programme
fournit une propriété ParametresProgramme qui est une collection de
ParametreProgramme.

Chaque programme appelle la dll pour lire ses paramètres. Il pourrait bien
sûr recevoir systématriquement une valeur String, à charge pour lui de
convertir dans le type adéquat. Je préfèrerais que ce soit la dll qui
fasse la conversion, pour renvoyer soit un Integer, soit un String, soit
un Char, etc. en fonction de son type. Problème, VB2005 refuse de
surcharger une propriété dont seuls les types de retour sont différents.
Je pourrais multiplier les propriétés : ValueInteger, ValueString,
ValueChar, etc., mais c'est fastidieux, lourd et inélégant.

Quelqu'un a-t-il mieux à proposer ?

Merci d'avance,
Gilbert