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

C# Discussion :

Collection de classe abstraite


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut Collection de classe abstraite
    Bonjour à tous,

    J'ai un léger soucis qui mélange héritage et Collection.
    J'ai une classe PeriodeBlock, qui est une classe abstraite dont hérite PeriodeBlockAccord & PeriodeBlockFirst, j'ai besoin d'une ObservableCollection que j'ai nommée Periods.

    Cette ObservableCollection, j'ai besoin qu'elle soit faite de PeriodColumnAccord pour PeriodeBlockAccord, de PeriodColumnFirst pour PeriodeBlockFirst, etc.

    Parce que j'aime bien éviter de multiplier le code, j'ai une classe abstraite PeriodeColumn dont héritent PeriodColumnAccord et PeriodColumnFirst.

    Pour que ça fonctionne, je me suis dit : déclarons une propriété abstract ObservableCollection<PeriodColumn> Periods.
    Et surchargeons la en dessous mais avec le type spécifique. Sauf que ça ne veut pas fonctionner parce que les types sont différents >.<

    Est-ce qu'il y a un moyen de passer outre ?

    Here is the 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
        public abstract class PeriodBlock
        {
                public abstract ObservableCollection<PeriodeColumn> Periods { get; set; }
     
                // Et tout un tas de trucs qui utilisent Periods
        }
     
        public class PeriodBlockAccord : PeriodBlock
        {
            private ObservableCollection<PeriodColumnAccord> _Periods;
            public override ObservableCollection<PeriodColumnAccord> Periods // <<<<< La tentative de surcharge
            {
                get { return _Periods; }
                set
                {
                    if (this._Periods != value)
                    {
                        this._Periods = value;
                        this.RaisePropertyChanged("Periods");
                    }
                }
            }
     
            // Et tout un tas de truc qui n'utilisent pas forcément Periods
     
        }
     
        public abstract class PeriodeColumn
        {
            // Du code commun à toutes mes colonnes
        }
     
        public class PeriodColumnAccord : PeriodeSpotASpotColumn
        {
            private double _Accord;
            public double Accord
            {
                get { return _Accord; }
                set
                {
                    if (this._Accord != value)
                    {
                        this._Accord = value;
                        this.RaisePropertyChanged("Accord");
                    }
                }
            }
            // Et du code unique en plus
        }
     
        public class PeriodColumnFirst : PeriodeSpotASpotColumn
        {
            private double _First;
            public double First
            {
                get { return _First; }
                set
                {
                    if (this._First != value)
                    {
                        this._First = value;
                        this.RaisePropertyChanged("First");
                    }
                }
            }
     
            // Et du code unique en plus
        }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Pour l'instant la seule solution que je vois c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public abstract class PeriodSpotASpotBlock<T> where T:PeriodeColumn
        {
                public abstract ObservableCollection<T> Periods { get; set; }
     
                // Et tout un tas de trucs qui utilisent Periods
        }

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Excuse moi mais soit il manque du code (déclaration de class) soit tu as merdé quelques parts. Parce que, j'ai regardé ton code et la class : PeriodBlock n'existe pas ...

    Tu devrais essayer de visualiser ton arbre d'héritage dans un schéma de classe en faisant un ajout de nouveau élément et recherché le diagramme de classe.

    Je pense que tu as fait trop compliqué pour ta problématique

  4. #4
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Petite faute de frappe de ma part.
    Le PeriodSpotASpotBlock est en fait ma classe PeriodBlock.

    Et vu que je me trimballe avec 80% d'un code commun qu'il faut mettre à jour pour 5 classes en même temps si je n'ai pas d'héritage, j'aimerais bien trouver une solution quand même :p
    J'ai juste simplifié les données de mon problème puisqu'il est le même que j'ai 2 ou 5 classes qui héritent

    BenoitM, je vais essayer ça, je reviens vers vous si ça a fonctionné (ou pas aussi d'ailleurs)

    Mise à jour :
    Cette solution fonctionne pour ce problème mais m'en soulève un nouveau lié à l'utilisation de MVVM qui n'a pas de rapport direct avec la question. Je vais chercher et si besoin j'ouvrirais un nouveau sujet.
    Merci à tous

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

Discussions similaires

  1. [Debutant] Une classe abstraite en parametre ?
    Par kiroukou dans le forum Débuter
    Réponses: 8
    Dernier message: 03/02/2005, 15h05
  2. [Débutant(e)] toString + classes abstraites
    Par debdev dans le forum Langage
    Réponses: 9
    Dernier message: 26/01/2005, 15h22
  3. [Debutant][Conception] Classes abstraites et interface.
    Par SirDarken dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 00h02
  4. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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