Parsing dans un classe générique ???

Résolu
cs_YOOP Messages postés 15 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 16 juillet 2008 - 23 janv. 2007 à 11:17
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 24 janv. 2007 à 13:48
Bonjour tout le monde,

J'ai un soucis concernant une classe générique. (c'est mon premier test avec ce genre de classe).

Voici :

public class Paramètre<TypeValue>
    {
private TypeValue _Value;
  public TypeValue Value
        {
            get { return _Value; }
            set {  _Value = value;  }
        }
     public bool Save_Value(object o)
        {
            int i;
           if(this.Value is int)
            {
               
                bool r = int.TryParse((string)o, out i);              
                this._Value = i; <=ERREUR de compilation.
                return r;
            }
        }
}

Donc mon problème est que la nouvelle valeur a sauvegarder dans la propriété de ma classe générique vient de d'un textbox. Donc je dois la parser... puis la sauvegarder...
Mais je n'arrive pas a trouver une solution...

Quelqu'un aurait-il une idée ou une solution????

Merci d'avance pour l'aide

YOOP,

5 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
24 janv. 2007 à 13:48
Alors j'ai rapidement regardé le code que tu m'as envoyé et à mon avis tu as un problème de conception :
Une classe generic permet d'être construite avec un certain type, par exemple

List<string> s = new List<string>();

Tu remarques qu'une fois initialisé, tu ne peux plus changer le type de cette classe, ce qui est logique, car le contenu est de type String, on ne peut pas tout d'un coup y mettre un object "Arbre".
Si tu regardes les méthodes/property de l'object 's' ci-dessus, tu constates qu'il n'y a que des méthodes GENERIQUES qui n'ont rien avoir avec son type! Par exemple, une méthode Add, Remove, etc. A aucun moment on accède directement à l'object: logique, puisqu'on ne connait pas son type et qu'à priori ça peut être n'importe quoi!

Qui dit type générique implique fonctions génériques. Tu ne peux pas par exemple ajouter une méthode qui s'appelle GetNombreDePattes à ton object car si je met un object de type Radio [MonObject<Radio> radio = new MonObject<Radio>()] dans la collection, la méthode n'a plus aucun sens!!

Pour terminer, tu peux tout de même spécifier avec la clause (le mot clef) where que ton object generic doit implémenter une certaine interface ou dérivée d'une certaine classe : Ca te permet d'appeler des méthodes plus précise de l'object, càd:

    public class Radio<T> where T : Vivant
    {
    }

Maintenant tu peux faire une méthode GetNombreDePatte car tu peux t'assurer que T sera un être vivant et que donc il aura des pattes
J'espère que c'est un peu plus clair...

<hr />
-Blog-
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
23 janv. 2007 à 11:49
Salut,

Première chose: oublies les accents dans le nom des classes !!!!!!!!!!
Ensuite, je crois que tu n'as pas bien saisi comment fonctionne une class générique: le but, c'est justement que les méthodes ne prennent plus des object en paramètres mais des Type T !
Pour l'erreur, c'est parce que tu assignes un type int à un TypeValue (pas de conversion implicite possible)

<hr />
-Blog-
0
cs_YOOP Messages postés 15 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 16 juillet 2008
23 janv. 2007 à 12:01
Re,

En effet, que de bonnes remarques.

Promis, je retire les accents.
Ensuite, je reprend conscience que ce type de classe est la pour ne plus utiliser les objects.
Mais, il me reste le problème suivant :

J'ai une string d'un composant visuelle Ctrl_parametre<Type_value> qui est associé à mon object Parametre.
Je veux récuperer la valeur de ce composant visuel qui est une string pour l'enregistrer dans la propriété de mon object paramètre.

Comment faire vu que je ne connais pas a l'avance le type de mon object parametre...

Donc en bref comment faire : Type_value variable = Parse(string)??? dans une classe : classe maclasse<Type_value>.

Merci d'avance.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
23 janv. 2007 à 15:32
Euh, j'ai pas bien compris...

<hr />
-Blog-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_YOOP Messages postés 15 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 16 juillet 2008
23 janv. 2007 à 16:01
Re,

Je vais tenter de clarifier la chose.

J'ai deux classe.
- Parametre<Type_Value>               // Générique : contient les data dont Value
- Parametre_ctrl<Type_Value>            // Un controle (visuel) utilisateur destiné destiné a afficher certaines variables de Parametre

Par le biais de Parametre_ctrl je veux modifier une valeur de Parametre.
La modification de la valeur se fait par le biais d'un textbox. Cette modification doit êre enregistrer dans l'object Parametre lié au controle (Parametre_ctrl).

Le problème est que je me retrouve avec une string (du textebox) que je dois caster en Type_Value de Parametre.
Or je ne connais pas a l'avance le type de Type_Value.

J'ai trouver une roue de secour du type : (bien que le but est de ne plus utiliser des objects)
if(
this.Parametre.Value
is
int)
{

object o0 =
int.Parse(
this.Txt_Value.Text);

this._parametre.Value = (TypeValue)o0;
}

if (
this.Parametre.Value
is
float)
{

object o0 =
float.Parse(
this.Txt_Value.Text);

this._parametre.Value = (TypeValue)o0;
}

if (
this.Parametre.Value
is
byte)
{

object o0 =
byte.Parse(
this.Txt_Value.Text);

this._parametre.Value = (TypeValue)o0;
}


Remarque que ce code vient de la classe Parametre_ctrl et que ce composant possède la référence de Parametre<Type_Value>

Voila,

En espérant avoir clarifier mon problème.

Merci pour le temps consacré a mon problème.

YOOP
0
Rejoignez-nous