IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Gestion de type avec classe possédant 2 constructeurs


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut Gestion de type avec classe possédant 2 constructeurs
    Hello tout le monde !

    Une petite question qui pourrait paraître anodine mais dont la réponse m'échappe...

    J'ai une classe possédant 2 constructeurs selon l'objet entré en paramètre :

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     public class MaClasse
        {
            /// <summary>
            /// Constructeur
            /// </summary>
            /// <param name="?"></param>
     
            public MaClasse( MonObjet1 objet1 )
            {
               //Initialisations....
            }
     
            /// <summary>
            /// Constructeur
            /// </summary>
            /// <param name="?"></param>
     
            public MaClasse(MonObjet2 objet2)
            {
                //Initialisations....       
            }
     
    //Propriétés...
    }
    J'ai une page remplissant les données de MonObjet1 et une autre remplissant les données de MonObjet2.

    Pour chaque page, il s'agit d'une liste de données (les objets en question étant des vues contenues dans des GridView).

    Ce que je souhaite faire, c'est, lorsque je clique sur une donnée, dans une des deux pages dans un gridview, j'atteinds le detail de cette donnée, et je voudrais atterrir sur la MEME page( cette page de detail serait donc commune aux 2 pages précédemment citées).

    D'où la création de ma classe MaClasse plus haut, qui, sur la page de détail, va initialiser les données, selon que ce soit MonObjet1 ou MonObjet2.

    Donc, j'avais pensé dans ma page de détail de faire la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     protected void Page_Load(object sender, EventArgs e)
        {
              //J'ai une classe permettant de recuperer les valeurs d'un objet entrés sur la page de données
             //Ces valeurs déterminent quel objet utiliser en quelques sortes:
             //this.IntermediairePage[SubPageIntermediaire.MonObjet]
              MonObjet1 monObjet1 = this.IntermediairePage[SubPageIntermediaire.MonObjet1] as MonObjet1;//Ceci ne me permet que de choisir un seul objet... :(
     
              MaClasse instanceMaClasse = new MaClasse(MonObjet1 ou MonObjet2);
     
        }
    Je ne sais pas si vous avez compris, mais en gros, je voudrais récupérer le bon objet, grossomodo le type de : this.IntermediairePage[SubPageIntermediaire.MonObjet] de type MonObjet
    et ensuite l'utiliser pour instanceMaClasse comme ceci : MaClasse instanceMaClasse = new MaClasse(TypeObjetRécupéré), ce qui va en conséquence utiliser l'un ou l'autre de mes constructeurs(si je ne me trompe pas ^^ ).

    J'espère avoir été assez clair et vous remercie d'avance pour votre aide .

  2. #2
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Et si tu ne le cast pas avant de le passer à ta méthode ?

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    object monObjet1 = this.IntermediairePage[SubPageIntermediaire.MonObjet1];
             
    MaClasse instanceMaClasse = new MaClasse(MonObjet1);

  3. #3
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Nop, déjà essayé et bien entendu VS me renvoie l'erreur "impossible de convertir un objet en MonObjet1 ou MonObjet2"...

    J'aurais voulu faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    object monObjetType = this.IntermediairePage[SubPageIntermediaire.MonObjet1].getType();
    Il y a un truc qui m'échappe...

    Au niveau de ma classe avec mes 2 constructeurs...

    La classe va switcher automatiquement le bon constructeur selon l'entrée en paramètre du type MonObjet1 ou MonObjet2 ?

  4. #4
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Dans ton objet avec ses deux constructeurs, tu peux ne plus en faire qu'un avec ce principe-ci, ça peut aller non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    class MaClass
    {
     
       public void MaClass(object MyObject)
       {
     
            if(MyObject is ObjectType1)
            {
                   ...
            }
            else if(MyObject is ObjectType2)
            {
                   ...
            }
     
     
       }
     
    }

  5. #5
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Mmmmh, ouais, je vais essayer, je pensais ça trop simple mais je vais tester ^^.

    Merci

  6. #6
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Arg, en fait, j'ai besoin de récuperer les propriétés de l'objet sélectionné et de lui assigner les propriétés de la classe...

    Mais je ne peux pas faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    public MaClass(object MyObject)
       {
     
            if(MyObject is ObjectType1)
            {
                   _myProperty1 = MyObject.Property1//Pas possible de récupérer la propriété de MyObject...
            }
            else if(MyObject is ObjectType2)
            {
                   _myProperty2 = MyObject.Property2
            }
     
     
       }

  7. #7
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Tu dois le caster

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    if(MyObject is ObjectType1)
            {
                   _myProperty1 = (MyObject as ObjectType1).Property1//Pas possible de récupérer la propriété de MyObject...
            }
            else if(MyObject is ObjectType2)
            {
                   _myProperty2 = (MyObject as ObjectType2).Property2
            }

  8. #8
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Merci beaucoup, ça fonctionne impec !



    (Je zappe souvent de caster...)

  9. #9
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Content d'avoir pu t'aider

  10. #10
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Encore une petite question :

    Vu que je vais avoir 3 et non 2 types d'objets, je ne voudrais pas faire de else if mais bien entendu switcher mes valeurs.

    Le souci c'est que bien sur l'on ne peut pas switcher sur des objets, et je ne vois pas comment faire pour switcher sur ma valeur, même avec du casting...

    J'aurais pensé à utiliser des Enum, mais je ne vois pas du tout comment appliquer la chose.

  11. #11
    Membre Expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Par défaut
    Comme ceci : ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    switch(MonObjet.GetType().Name)
            {
                case "NomTypeObjet1":
     
                    break;
                case "NomTypeObjet2":
     
                    break;
                case "NomTypeObjet3":
     
                    break;
     
                default:
                    break;
            }

  12. #12
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Han ouais je voulais faire ça au début mais je suis un peu du genre à éviter les string...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Deserialization avec type de classe dans attribut
    Par GroovyBaby dans le forum C#
    Réponses: 1
    Dernier message: 19/11/2008, 13h45
  2. Gestion des piles avec les classe
    Par souad21 dans le forum C++
    Réponses: 1
    Dernier message: 24/10/2007, 06h10
  3. Pb avec classe CCOM (Gestion de liaison série)
    Par pdaniel dans le forum MFC
    Réponses: 7
    Dernier message: 08/03/2007, 10h09
  4. [Upload] Problème pour gestion d'erreur avec class
    Par allserv dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2005, 13h00
  5. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo