OVH Cloud OVH Cloud

Classe et propriétés !

14 réponses
Avatar
Thierry
Bonsoir,
Pas encore bien familiarisé avec VB.Net 2005 je ne trouve pas la solution à
mon problème :
Dans une Classe, j'ai une propriété en lecture/écriture. En écriture je dois
passer un paramètre afin de faire un petit calcul avant de stocker la
valeur. En lecture je récupère simplement ma valeur. Le problème c'est que
quand je veux lire la valeur de la propriété (lecture) je suis obligé de
fournir un paramètre (du même type que celui utilisé au moment de
l'écriture).
Il existe certainement une solution pour obtenir ma valeur sans fournir de
paramètre !

Merci pour votre aide.

@+
Thierry

4 réponses

1 2
Avatar
Thierry
Bonsoir et merci à vous pour vos réponses,
Oui, c'est exactement ce que je veux pouvoir faire. Passer un paramètre à la
propriété au moment de l'écriture et ne pas donner de paramètre, puisqu'il
est inutile, au moment de la lecture.
Je veux donc pouvoir obtenir ça au moment d'écrire mon code :

Pour définir la propriété :
obj.Prop(param) = valeur

Pour la lire :
valeur = obj.Prop

Le code de Fred semble correspondre (à part une erreur de paramètre). Mais
cela est il conforme aux méthodes de programmation ? Ou bien faut-il
utiliser une seule propriété et lui passer un paramètre inutile au moment de
la lire ?

Si vous avez des avis !

Merci
@+
Thierry





"Fred" a écrit dans le message de news:
%
Dans : news:%,
Bill2 disait :

<citation>
En écriture je dois passer un paramètre afin de faire un petit calcul
avant de stocker la valeur.
</citation>



et ben, mon Set répond à ca justement ...



Je crois comprendre que Thierry veut écrire :
obj.Prop(param) = valeur

et en lecture simplement écrire :
valeur = obj.Prop
plutôt que
valeur = obj.Prop(paramInutile)

Une propriété paramétrée quoi. Rien de très complexe en somme.
Avez-vous compris ce que j'ai compris de la question ? Je ne dis pas que
c'est *certainement* cela. Mais simplement ce que sa formulation laisse
entendre.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)


Avatar
Fred
Dans : news:%,
Thierry disait :

Bonsoir et merci à vous pour vos réponses,



Bonjour,

Le code de Fred semble correspondre (à part une erreur de paramètre).



Sans doute. Comme tu ne précisais pas les paramètres, j'ai mis
arbitrairement un paramètre de type Int32 et une propriété de type
String.
Tu as juste à changer les types et écrire le code de la propriété en
écriture seule.

Mais cela est il conforme aux méthodes de programmation ? Ou bien
faut-il utiliser une seule propriété et lui passer un paramètre
inutile au moment de la lire ?



Je ferais une propriété en lecture seule sans paramètre et une sub
«SetProp» avec deux paramètres. Mais c'est juste pour que le code soit
plus clair. La méthode que je t'ai proposée peut paraître étrange si le
lecteur n'a pas un minimum de notions en programmation objet, mais elle
fonctionne parfaitement : je l'ai bien sûr testée avant de poster, avec
cet exemple que tu peux essayer en application Console (remplace le
contenu du fichier Module1.vb par ce qui suit).


Module Module1
Sub Main()
Dim t As New Test
t.Prop = "Init"
t.Prop(5) = "Test"
Console.WriteLine(t.Prop)
Console.ReadLine()
End Sub

Public Class Test
Private _prop As String
'Ajoute «count» fois «value» à «Prop»
Public Overloads WriteOnly Property Prop( _
ByVal count As Int32) As String
Set(ByVal value As String)
While count > 0
Me._prop &= value
count -= 1
End While
End Set
End Property

Public Overloads Property Prop() As String
Get
Return Me._prop
End Get
Set(ByVal value As String)
'Initialise «Prop» avec «value»
Me._prop = value
End Set
End Property

'La variante que j'ai mentionnée
Public Sub SetProp( _
ByVal count As Int32, _
ByVal value As String)
While count > 0
Me._prop &= value
count -= 1
End While
End Sub
End Class

End Module


PS : dans mon exemple, j'ai ajouté les mots clés «Overloads» mais ils
sont implicites en vb. Je les ai ajoutés car c'est la clé du principe :
la surcharge. Je te laisse faire «F1» dessus pour visualiser l'aide. Tu
pourras toujours ouvrir un autre fil en cas de questions
supplémentaires.
J'ai aussi laissé une des surcharges de la propriété Prop en
lecture/écriture au cas où, mais tu peux la remettre en lecture seule
comme dans mon premier post.


--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Bill2
Fred wrote:
Dans : news:,



'C'est là que ça devient intéressant
obj.MaProp(LeParamètreDeThierry) = LaValeurDeThierry

Qu'est-ce que cela donne ?
Ça compile ?
Peut-être n'avez-vous pas eu le temps de tester depuis ce matin ?




euh .. .bon sang ,j'avais pas vu ça comme ça ;) autant pour moi ;)

Dans ce cas, effectivementt, c'est pas "bon"

donc ce que je ferais, c'est juste une prop

public MaProp as MonType

donc lecture/ecriture

et pour pouvoir tratier un calcul lors de l'écriture, je rajouterais un
évènement sur la prop, lorsque la valeur change, ça devrait le faire ...
mais là, j'ai pu trop en tete le code necessaire à la gestion d'évènement,
mais ça se trouve partout sur le net ça ;)


Encore désolé de m'etre "emporte" ainsi :)

--
bill2
Avatar
Patrice
Difficile à dire sans connaitre le calcul sous-jacent mais je ne trouve pas
cela très élégant. Si je le mets sous forme d'une "vraie" propriété, je
ferais plutôt si possible qq chose comme :

obj.Prop=MaClass.MonCalcul(Param,Value)
Debug.WriteLine(obj.Prop)

De façon à ce que la valeur affectée à la propriété soit bien la même que
celle relue ensuite.

--
Patrice

"Thierry" a écrit dans le message de news:
%
Bonsoir et merci à vous pour vos réponses,
Oui, c'est exactement ce que je veux pouvoir faire. Passer un paramètre à
la propriété au moment de l'écriture et ne pas donner de paramètre,
puisqu'il est inutile, au moment de la lecture.
Je veux donc pouvoir obtenir ça au moment d'écrire mon code :

Pour définir la propriété :
obj.Prop(param) = valeur

Pour la lire :
valeur = obj.Prop

Le code de Fred semble correspondre (à part une erreur de paramètre). Mais
cela est il conforme aux méthodes de programmation ? Ou bien faut-il
utiliser une seule propriété et lui passer un paramètre inutile au moment
de la lire ?

Si vous avez des avis !

Merci
@+
Thierry





"Fred" a écrit dans le message de news:
%
Dans : news:%,
Bill2 disait :

<citation>
En écriture je dois passer un paramètre afin de faire un petit calcul
avant de stocker la valeur.
</citation>



et ben, mon Set répond à ca justement ...



Je crois comprendre que Thierry veut écrire :
obj.Prop(param) = valeur

et en lecture simplement écrire :
valeur = obj.Prop
plutôt que
valeur = obj.Prop(paramInutile)

Une propriété paramétrée quoi. Rien de très complexe en somme.
Avez-vous compris ce que j'ai compris de la question ? Je ne dis pas que
c'est *certainement* cela. Mais simplement ce que sa formulation laisse
entendre.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)






1 2