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 !
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)
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" <foleide@libre.france> a écrit dans le message de news:
%23qxTalsnHHA.1476@TK2MSFTNGP03.phx.gbl...
Dans : news:%23f2WRornHHA.3264@TK2MSFTNGP04.phx.gbl,
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)
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)
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)
Dans : news:%23m2qe4wnHHA.4872@TK2MSFTNGP03.phx.gbl,
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)
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)
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
Fred wrote:
Dans : news:u7DaSwsnHHA.3968@TK2MSFTNGP06.phx.gbl,
'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 ;)
'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
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 :
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)
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 :
De façon à ce que la valeur affectée à la propriété soit bien la même que
celle relue ensuite.
--
Patrice
"Thierry" <thierrybab@wanadoo.fr> a écrit dans le message de news:
%23m2qe4wnHHA.4872@TK2MSFTNGP03.phx.gbl...
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" <foleide@libre.france> a écrit dans le message de news:
%23qxTalsnHHA.1476@TK2MSFTNGP03.phx.gbl...
Dans : news:%23f2WRornHHA.3264@TK2MSFTNGP04.phx.gbl,
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)
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 :
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)