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 :

[C#] Hériter de ArrayList


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut [C#] Hériter de ArrayList
    Bonjour à tous !

    Je suis en train d'écrire une classe qui érite de ArrayList. Dans cette nouvelle classe je veux remplacer la métode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public int Add(object value)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public Boolean Add(Véhicule v)
    {
                Boolean b = false;
                if (EstUneImmatriculationValide(v.Immatriculation))
                {
                    if (EstUneImmatriculationUtilisée(v.Immatriculation) == false)
                    {
                        b = true;
                        Add(v); //c'est ici que ca cloche
                    }
                }
                return b;
    }
    Si je laisse tel quel j'aurais une boucle sans fin.
    J'aurai donc voulu savoir comment je pouvais appeler la méthode originale add après avoir fait mes test.
    Et aussi comment faire pour qu'elle remplace complètement l'ancienne méthode car là il ajoute cette méthode en tant que surcharge. Je pense que c'est avec override mais ca ne fonctionne pas...

    Merci !

  2. #2
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Tu as une solution recursive parce que tu appelles la methode Add de ta liste. Tu dois surcharger cette methode avec override(elle est marquee comme virtual dans la class ArrayList ) comme tu l'as dis. Quand tu veux ajouter a la liste tu dois appeler la methode de la classe mere Je te propose un petit programme qui fonctionne et qui peut te donner la reponse de ta question
    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
    70
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                MList mlist = new MList();
     
                Voiture[] vs = new Voiture[20];
                for (int i = 0; i < vs.Length; i++)
                {
                    vs[i] = new Voiture(i);
                }
     
                foreach (Voiture v in vs)
                {
                    mlist.Add(v);
                }
     
                foreach (Voiture v in mlist)
                {
                    v.Info();
                }
            }
        }
     
        class MList : ArrayList
        {
            public override int Add(object value)
            {
                if (value is Voiture)
                {
                    Voiture v = (Voiture)value;
                    if (v.Numero > 9)
                    {
                        return base.Add(v);
                    }
                }
                return -1;
            }
        }
     
        class Voiture
        {
            public Voiture(int numero)
            {
                this.numero = numero;
            }
     
            public void Info()
            {
                Console.WriteLine(numero);
            }
     
            private int numero;
     
            public int Numero
            {
                get { return numero; }
                set { numero = value; }
            }
     
        }
    }
    Juste une derniere chose. Avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if (value is Voiture)
                {
                    Voiture v = (Voiture)value;
                    if (v.Numero > 9)
                    {
                        return base.Add(v);
                    }
                }
    Tu as une collection "generic" tu ne peux ajouter que des voitures.

  3. #3
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    J'aurai pensé qu'il y avait plus simple....
    Par exemple en delphi j'aurai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    if not EstUneImmatriculationUtilisée(v.Immatriculation) then
    begin
       b := true;
       inherited Add(v);
    end
    ...
    Mais si ca ne peux pas se faire en C# alors je me résignerai à ta solution !

  4. #4
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    C# n'est pas Delphi Si tu regardes bien tu verras que la version C# n'est pas tres differente de la version Delphi ( ou peut-etre je me trompe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    begin
       b := true;
       inherited Add(v);
    end
    A+

  5. #5
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    Merci ca marche nikel, exactement ce que je cherchais !

    A+

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

Discussions similaires

  1. [debutant] Hériter de ArrayList
    Par laclac dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/10/2007, 13h02
  2. [info]arrayList ou Vector
    Par schousso dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/05/2004, 15h47
  3. [info]ArrayList
    Par schousso dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 06/05/2004, 11h44
  4. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41
  5. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24

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