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 :

Bug de génération


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut Bug de génération
    Bonjour,

    Alors que je veux générer mon programme, Visual C# m'indique que:
    L'espace de noms 'Application_BIS' contient déjà une définition de 'Compte'

    Mais il s'agit justement DE l'unique objet Compte que j'ai crée!

    Voici l'intégralité du code (il s'agit de la 1ère partie du TP sur la POO de la partie 3 du tutoriel du C#):
    (Bon courage pour la lecture )
    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
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System;
     
     
    namespace Application_BIS
    {
        class Program
        {
            static void Main(string[] args)
            {
                CompteCourantNicolas compteCNicolas = new CompteCourantNicolas("Nicolas") { DecouvertAutorise=2000 };
                CompteEpargneEntrepriseNicolas compteEENicolas = new CompteEpargneEntrepriseNicolas("Nicolas") {Taux_DAbonnement = 0.02 };
                CompteCourantJeremy compteCJeremy = new CompteCourantJeremy("Jeremy") {DecouvertAutorise=500};
     
                compteCNicolas.Crediter(100);
                compteCNicolas.Debiter(50);
                compteCNicolas.Crediter(20);
                Compte.Transferer(20, compteCNicolas, compteEENicolas);
                compteCNicolas.Crediter(100);
                Compte.Transferer(20, compteEENicolas, compteCNicolas);
                compteCJeremy.Debiter(500);
                Compte.Transferer(200, compteCJeremy, compteCNicolas);
     
                Console.WriteLine("Solde compte courant de Nicolas:" + compteCNicolas.Solde);
                Console.WriteLine("Solde compte épargne de Nicolas:"+ compteEENicolas.Solde);
                Console.WriteLine("Solde compte courant de Jeremy:"+ compteCJeremy.Solde);
     
                compteCNicolas.AfficherResumeCompte();
                compteEENicolas.AfficherResumeCompte();
     
     
     
     
            }
        }
    }
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        public class Compte
        {
            public int Solde { get; set; }
            public string Proprietaire { get; set; }
            private List<string> Historique = new List<string>();
            private int x =0;
     
     
     
            Compte(string nom)
            {
                Solde = 0;
                Proprietaire = nom;
            }
     
            Compte(int x, string nom)
            {
                Solde = x;
                Proprietaire = nom;
            }
     
     
     
     
     
     
            public void Crediter(int somme)
            {
                Solde += somme;
                Historique[x] = "+" + somme;
                x++;
            }
     
            public void Crediter(int somme,Compte compte)
            {
                Solde += somme;
                Historique[x] = "+" + somme;
                x++;
            }
     
            public void Debiter(int somme)
            {
                Solde -= somme;
                Historique[x] = "-" + somme;
                x++;
            }
     
            public void Debiter(int somme,Compte compte)
            {
                Solde -= somme;
                Historique[x] = "-" + somme;
                x++;
            }
     
            public static void Transferer <T,U> (int somme,T t,U u ) 
                where T:Compte  
                where U:Compte 
            {
                t.Debiter(somme);
                u.Crediter(somme);
     
            }
     
     
     
            protected virtual void AfficherHistorique()
            {
     
                Console.WriteLine("Historique:");
                for (int i = 0; i < Historique.Count; i++)
                {
                    Console.WriteLine(Historique[i]);
                }
     
            }
     
     
     
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_courant:Compte
        {
            public int DecouvertAutorise { get; set; }
     
            public override void AfficherResumeCompte()
            {
                Console.WriteLine("************************************");
                Console.WriteLine("Résumé du compte de" + Proprietaire);
                Console.WriteLine("************************************");
                Console.WriteLine("Compte courant de" + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine(DecouvertAutorise);
                base.AfficherHistorique();
     
     
                Console.WriteLine("************************************");
            }
     
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_epargne_entreprise:Compte
        {
            public double Taux_DAbonnement { get; set; }
     
            public void AfficherResumeCompte()
            {
                Console.WriteLine("####################################");
                Console.WriteLine("Résumé du compte de" + Proprietaire);
                Console.WriteLine("####################################");
                Console.WriteLine("Compte épargne entreprise de" + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine("Taux d'abonnement:"+ Taux_DAbonnement);
                base.AfficherHistorique();
                Console.WriteLine("####################################");
     
            }
     
        }
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteCourantNicolas:Compte_courant
        {
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteEpargneEntrepriseNicolas:Compte_epargne_entreprise
        {
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteCourantJeremy:Compte_courant
        {
        }
    }

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Et si tu met le mot clé public devant tes 2 constructeurs?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public Compte(string nom)
            {
                Solde = 0;
                Proprietaire = nom;
            }
     
            public Compte(int x, string nom)
            {
                Solde = x;
                Proprietaire = nom;
            }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Ça change rien.
    Il y a toujours le même message...

    Aidez moi S.V.P!

  4. #4
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    Bonjour

    et avec un type pour le(s) constructeur(s) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void Compte(...)
    vous avez bien fait sur les constructeurs Debiter et Crediter, pourquoi ne pas faire sur Compte ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Maxwime,

    J'ai regardé très attentivement ton code et je pense qu'en plus de l'erreur que tu nous mentionnes, tu as du avoir d'autres erreurs, regardes bien dans ta fenêtre d'erreurs.

    En effet, dans tes classes dérivées de la classe "Compte", tu fais un override d'une méthode "AfficherResumeCompte" qui ne figure pas dans la classe "Compte" ni en virtual ni en abstract. Visiblement tu as dû vouloir renommer ta méthode "AfficherHistorique" en "AfficherResumeCompte" mais tu ne l'as pas fait dans la classe de base. De plus, il faut que ta méthode de base ait aussi la même portée que tes méthodes substituées. Ici, s'il s'agit bien de "AfficherHistorique", elle devrait être publique dans la classe "Compte".

    Donc pour correspondre, ta classe "Compte" devrait être ainsi :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        public class Compte
        {
            public int Solde { get; set; }
            public string Proprietaire { get; set; }
            private List<string> Historique = new List<string>();
            private int x =0;
     
     
     
            protected Compte(string nom)
            {
                Solde = 0;
                Proprietaire = nom;
            }
     
            protected Compte(int x, string nom)
            {
                Solde = x;
                Proprietaire = nom;
            }
     
     
     
     
     
     
            public void Crediter(int somme)
            {
                Solde += somme;
                Historique[x] = "+" + somme;
                x++;
            }
     
            public void Crediter(int somme,Compte compte)
            {
                Solde += somme;
                Historique[x] = "+" + somme;
                x++;
            }
     
            public void Debiter(int somme)
            {
                Solde -= somme;
                Historique[x] = "-" + somme;
                x++;
            }
     
            public void Debiter(int somme,Compte compte)
            {
                Solde -= somme;
                Historique[x] = "-" + somme;
                x++;
            }
     
            public static void Transferer <T,U> (int somme,T t,U u ) 
                where T:Compte  
                where U:Compte 
            {
                t.Debiter(somme);
                u.Crediter(somme);
     
            }
     
     
     
            public override void AfficherResumeCompte()
            {
     
                Console.WriteLine("Historique:");
                for (int i = 0; i < Historique.Count; i++)
                {
                    Console.WriteLine(Historique[i]);
                }
     
            }
     
        }
    }
    Tu remarqueras que j'ai ajouté "protected" devant tes constructeurs car sans spécification de portée c'est "privé" et on ne peut plus dériver une classe qui n'a pas au moins un constructeur "protected" ou "public".

    @stolx_10 : non, en C# il n'y a pas de type sur les constructeurs sinon ce ne sont plus des constructeurs. De plus, "Debiter" et "Crediter" ne sont pas des constructeurs mais des méthodes.

  6. #6
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    Et bien merci de ta remarque...je vais modifier mon code chez moi effectivement, ça me paraissait bizarre le comportement de ma classe

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 169
    Points
    169
    Par défaut
    Salut,

    A mon avis tu ne nous a pas tout montré dans ton premier post... Tu dois avoir un autre fichier dans le projet qui contient une définition de la classe Compte.
    Cherche toutes les occurences de "class Compte" dans ta solution, tu devrais trouver.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Oui j'ai pas d'autres erreurs même après régénération. Mais j'ai quand même enlevé virtual et override parce la méthode AfficherHistorique() est bien différente de AfficherResumeCompte(). Je l'ai crée dans l'objet de base pour ne à avoir à réécrire le même bout de code dans les classes dérivées.

    Sinon Jaco67 voilà tous les fichiers présents dans mon projet:
    Beug de génération.odt

  9. #9
    Invité
    Invité(e)
    Par défaut
    ça te fait toujours la même erreur, même après avoir enlevé les "override"?

    Dans ce cas peux-tu nous montrer ce que tout le code est devenu?
    Dernière modification par Invité ; 04/04/2014 à 18h18.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    J'ai trouvé! En faite j'avais un deuxième fichier Compte_Courant (le 1er étant Compte_courant) qui contenait une classe Compte. (Surement le fichier d'origine que j'avais perdu).
    Mais ça ne marche toujours pas. Visual C#express indique:

    Au niveau de Compte_Courant et de Compte_epargne_entreprise:
    'Application_Bis.Compte' ne contient pas un constructeur qui accepte des arguments 0

    Et qu'au niveau de: (class Program)
    CompteCourantNicolas compteCNicolas = new CompteCourantNicolas("Nicolas") { DecouvertAutorise=2000 };
    CompteEpargneEntrepriseNicolas compteEENicolas = new CompteEpargneEntrepriseNicolas("Nicolas") {Taux_DAbonnement = 0.02 };
    CompteCourantJeremy compteCJeremy = new CompteCourantJeremy("Jeremy") {DecouvertAutorise=500};

    [...] ne contient pas un constructeur qui accepte des arguments 1

    Voici le nouveau 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
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System;
     
     
    namespace Application_BIS
    {
        class Program
        {
            static void Main(string[] args)
            {
                CompteCourantNicolas compteCNicolas = new CompteCourantNicolas("Nicolas") { DecouvertAutorise=2000 };
                CompteEpargneEntrepriseNicolas compteEENicolas = new CompteEpargneEntrepriseNicolas("Nicolas") {Taux_DAbonnement = 0.02 };
                CompteCourantJeremy compteCJeremy = new CompteCourantJeremy("Jeremy") {DecouvertAutorise=500};
     
                compteCNicolas.Crediter(100);
                compteCNicolas.Debiter(50);
                compteCNicolas.Crediter(20);
                Compte.Transferer(20, compteCNicolas, compteEENicolas);
                compteCNicolas.Crediter(100);
                Compte.Transferer(20, compteEENicolas, compteCNicolas);
                compteCJeremy.Debiter(500);
                Compte.Transferer(200, compteCJeremy, compteCNicolas);
     
                Console.WriteLine("Solde compte courant de Nicolas:" + compteCNicolas.Solde);
                Console.WriteLine("Solde compte épargne de Nicolas:"+ compteEENicolas.Solde);
                Console.WriteLine("Solde compte courant de Jeremy:"+ compteCJeremy.Solde);
     
                compteCNicolas.AfficherResumeCompte();
                compteEENicolas.AfficherResumeCompte();
     
     
     
     
            }
        }
    }
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        public class Compte
        {
            public int Solde { get; set; }
            public string Proprietaire { get; set; }
            private List<string> Historique = new List<string>();
            private int x =0;
     
     
     
            protected Compte(string nom)
            {
                Solde = 0;
                Proprietaire = nom;
            }
     
            protected Compte(int x, string nom)
            {
                Solde = x;
                Proprietaire = nom;
            }
     
     
     
     
     
     
            public void Crediter(int somme)
            {
                Solde += somme;
                Historique[x] = "+" + somme;
                x++;
            }
     
            public void Crediter(int somme,Compte compte)
            {
                Solde += somme;
                Historique[x] = "+" + somme;
                x++;
            }
     
            public void Debiter(int somme)
            {
                Solde -= somme;
                Historique[x] = "-" + somme;
                x++;
            }
     
            public void Debiter(int somme,Compte compte)
            {
                Solde -= somme;
                Historique[x] = "-" + somme;
                x++;
            }
     
            public static void Transferer <T,U> (int somme,T t,U u ) 
                where T:Compte  
                where U:Compte 
            {
                t.Debiter(somme);
                u.Crediter(somme);
     
            }
     
     
     
            public void AfficherHistorique()
            {
     
                Console.WriteLine("Historique:");
                for (int i = 0; i < Historique.Count; i++)
                {
                    Console.WriteLine(Historique[i]);
                }
     
            }
     
     
     
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_epargne_entreprise:Compte
        {
            public double Taux_DAbonnement { get; set; }
     
            public void AfficherResumeCompte()
            {
                Console.WriteLine("####################################");
                Console.WriteLine("Résumé du compte de" + Proprietaire);
                Console.WriteLine("####################################");
                Console.WriteLine("Compte épargne entreprise de" + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine("Taux d'abonnement:"+ Taux_DAbonnement);
                base.AfficherHistorique();
                Console.WriteLine("####################################");
     
            }
     
        }
    }
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_Courant : Compte
        {
            public int DecouvertAutorise { get; set; }
     
            public void AfficherResumeCompte()
            {
                Console.WriteLine("************************************");
                Console.WriteLine("Résumé du compte de" + Proprietaire);
                Console.WriteLine("************************************");
                Console.WriteLine("Compte courant de" + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine(DecouvertAutorise);
                base.AfficherHistorique();
     
     
                Console.WriteLine("************************************");
            }
     
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteCourantNicolas:Compte_Courant
        {
        }
    }
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteEpargneEntrepriseNicolas:Compte_epargne_entreprise
        {
        }
    }
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteCourantJeremy:Compte_Courant
        {
        }
    }
    Sinon depuis que je vous ai montré mes fichiers j'obtiens un écran de ce genre:
    C# forum.odt

    Es ce que vous ne sauriez pas comment faire pour avoir la page par défaut?


    Merci d'avance!

  11. #11
    Invité
    Invité(e)
    Par défaut
    Eh bien pour l'erreur c'est simple : dans tes classes dérivées, tu ne spécifies aucun constructeur. Pour le compilateur, cela signifie par défaut qu'il y a pour toutes ces classes un constructeur publique par défaut sans paramètre... Or, la classe de base "Compte" n'a pas de constructeur sans paramètre, puisque tu en as spécifié 2 avec des paramètres.
    Donc il faut spécifier quel constructeur de la classe de base tu veux utiliser.
    Exemple :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_Courant : Compte
        {
            public int DecouvertAutorise { get; set; }
     
            public Compte_Courant(string nom) : base(nom) { } //Exemple : Constructeur de Compte_Courant en lui disant qu'on utilise le constructeur de "Compte" avec un seul paramètre.
     
            public void AfficherResumeCompte()
            {
                Console.WriteLine("************************************");
                Console.WriteLine("Résumé du compte de" + Proprietaire);
                Console.WriteLine("************************************");
                Console.WriteLine("Compte courant de" + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine(DecouvertAutorise);
                base.AfficherHistorique();
     
     
                Console.WriteLine("************************************");
            }
     
     
     
        }
    }
    Pour l'autre erreur, c'est évident : tu demandes des constructeurs que tu n'as jamais implémenté!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    C'est bon il y a plus d'erreurs, en revanche j'obtiens une exception:

    Unhandled Exception: System.ArgumentOutOfRangeException: Index was out of range.
    Must be non-negative and less than the size of the collection.
    Parameter name: index
    at System.ThrowHelper.ThrowArgumentOutOfRangeException<>
    at System.Colection.Generic.List '1.set_Item<Int32 index, T value)
    at Application_BIS.Compte.Crediter<Int32 somme> in C:\Users\Public\Programmation\Application BIS\Application BIS\Compte.cs:line 37
    at Application_BIS.Program.Main<String[] args> in C:\Users\Public\Programmation\Application BIS\Application BIS\Program.cs:line 17

    Probablement lié à la methode Crediter()...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Oui, effectivement, je n'avais pas regardé ces fonctions en détail.

    Quand tu fais par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Historique[x] = "+"+somme;
    Il faut que l'index "x" existe dans ta liste.

    Il faut plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Historique.Add("+"+somme);
    De plus, la variable globale x ne sert strictement à rien car la liste générique suit elle-même le nombre d'éléments dans la liste.

    N'hésites pas à consulter les docs MSDN en lignes des différents objets Microsoft.
    Pour y accéder, tu peux par exemple mettre ton curseur sur "List<int>" et faire F1. Et là normalement tu atterris directement sur l'aide en ligne de la classe "List générique", où tu auras même des exemples disponibles.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Merci! C'est bon ça marche avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void Debiter(int somme)
     {
         Solde -= somme;
         Historique.Add("-" + somme);
                x++;
     }
    En revanche j'ai pas bien compris pourquoi ça marchait pas avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private int x =0; 
    [...]
    Historique[x] = "+"+somme;
    x++;
    Comment on aurait on du faire si on avait utilisé un tableau à la place de la liste?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Maxwime Voir le message
    En revanche j'ai pas bien compris pourquoi ça marchait pas avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private int x =0; 
    [...]
    Historique[x] = "+"+somme;
    x++;
    Je t'ai déjà donné toutes les explications à ce sujet, que faut-il dire de plus?
    As-tu regardé la doc en ligne de MSDN comme je t'avais dit aussi?

    Citation Envoyé par Maxwime Voir le message
    Comment on aurait on du faire si on avait utilisé un tableau à la place de la liste?
    Un tableau a une taille fixe à sa création. C'est pourquoi la liste est bien le type le mieux adapté à ta situation.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    C'est bon j'ai regardé le site:
    http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

    Mais j'ai pas compris ce que ça signifiait:
    Il faut que l'index "x" existe dans ta liste.

    L'index x se trouve pourtant bien entre crochets... et la variable x existe en tant que variable globale...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Historique[x] = "+"+somme;

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Maxwime Voir le message
    Et il ne faut pas non plus hésiter à te balader sur les rubriques du "see also", notamment la rubrique qui détaille les membres de la liste.

    Citation Envoyé par Maxwime Voir le message
    Mais j'ai pas compris ce que ça signifiait:
    Il faut que l'index "x" existe dans ta liste.
    OK, j'ai peut-être été un peu court dans mon explication, mais tu aurais pu trouver les explications supplémentaires en te baladant sur MSDN et en faisant des expériences avec le debugger, d'ailleurs c'est comme ça qu'on progresse le mieux je trouve.

    En ce qui concerne la variable x, comme je te l'ai déjà dit plus haut elle est complétement inutile car l'objet de type "List" (en l'occurrence "Historique") dispose déjà du décompte du nombre d'objets avec la propriété Count.
    En ce qui concerne le fonctionnement de la liste, sa taille est donc définie par la propriété Count et si par exemple tu tente de faire :
    et que x>=Historique.Count alors tu va obtenir cette fameuse exception "ArgumentOutOfRangeException". Tout ça parce que l'usage de la liste exige de passer par la méthode "Add" pour ajouter un nouvel élément dedans et de ce fait cela va augmenter la taille "Count" de la liste.
    Une fois que l'élément est ajouté dans la liste, tu peux utiliser l'accesseur "Historique[0]" par exemple pour aller chercher l'élément existant à l'indice 0, et tu peux aussi changer l'élément à l'indice existant avec le même accesseur.
    Regarde ici pour l'aide en ligne de l'accesseur.

    Dans le Framework.NET, il y a d'autres objets de type collection. L'usage que tu faisais de la liste (savoir aller affecter directement Historique[x] alors que x>=Count) est en fait le bon usage pour un objet de type Dictionary mais donc pas le bon pour un objet de type List.

    As-tu bien compris?

    Citation Envoyé par Maxwime Voir le message
    L'index x se trouve pourtant bien entre crochets... et la variable x existe en tant que variable globale...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Historique[x] = "+"+somme;
    Donc comme je disais plus haut x ne te sert à rien, car "Historique.Count" fais la même chose et tient les comptes à jour sans le moindre effort de développement supplémentaire.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    C'est bon j'ai compris en faite j'avais oublié de définir la taille de la liste
    Du coup c'est vrai que c'est plus pratique d'utiliser:
    Sinon qu'est ce que vous en pensez de mon 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
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System;
     
     
    namespace Application_BIS
    {
        class Program
        {
            static void Main(string[] args)
            {
                CompteCourantNicolas compteCNicolas = new CompteCourantNicolas("Nicolas") { DecouvertAutorise=2000 };
                CompteEpargneEntrepriseNicolas compteEENicolas = new CompteEpargneEntrepriseNicolas("Nicolas") {Taux_DAbonnement = 0.02 };
                CompteCourantJeremy compteCJeremy = new CompteCourantJeremy("Jeremy") {DecouvertAutorise=500};
     
                compteCNicolas.Crediter(100);
                compteCNicolas.Debiter(50);
                Compte.Transferer(20, compteCNicolas, compteEENicolas);
                compteEENicolas.Crediter(100);
                Compte.Transferer(20, compteEENicolas, compteCNicolas);
                compteCJeremy.Debiter(500);
                Compte.Transferer(200, compteCJeremy, compteCNicolas);
                Compte_epargne_entreprise.PourcentageAnnuel(compteEENicolas);
     
     
     
                Console.WriteLine("Solde compte courant de Nicolas:" + compteCNicolas.Solde);
                Console.WriteLine("Solde compte épargne de Nicolas:"+ compteEENicolas.Solde);
                Console.WriteLine("Solde compte courant de Jeremy:"+ compteCJeremy.Solde);
     
                compteCNicolas.AfficherResumeCompte();
                compteEENicolas.AfficherResumeCompte();
     
     
     
     
            }
        }
    }
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        public class Compte
        {
            public double Solde { get; set; }
            public string Proprietaire { get; set; }
            private List<string> Historique = new List<string>();
     
     
     
     
            protected Compte(string nom)
            {
                Solde = 0;
                Proprietaire = nom;
            }
     
            protected Compte(int x, string nom)
            {
                Solde = x;
                Proprietaire = nom;
            }
     
     
     
     
     
     
            public void Crediter(int somme)
            {
                Solde += somme;
                Historique.Add("+" + somme);  
            }
     
            public void Crediter(int somme,Compte compte)
            {
                Solde += somme;
                Historique.Add("+" + somme);  
            }
     
            public void Debiter(int somme)
            {
                Solde -= somme;
                Historique.Add("-" + somme);    
            }
     
            public void Debiter(int somme,Compte compte)
            {
                Solde -= somme;
                Historique.Add("-" + somme); 
            }
     
            public static void Transferer <T,U> (int somme,T t,U u ) 
                where T:Compte  
                where U:Compte 
            {
                t.Debiter(somme);
                u.Crediter(somme);
     
            }
     
     
     
            public void AfficherHistorique()
            {
     
                Console.WriteLine("Historique:");
                for (int i = 0; i < Historique.Count; i++)
                {
                    Console.WriteLine(Historique[i]);
                }
     
            }
     
     
     
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_epargne_entreprise:Compte
        {
            public double Taux_DAbonnement { get; set; }
            public Compte_epargne_entreprise(string nom) : base(nom) { }
     
            public void AfficherResumeCompte()
            {
                Console.WriteLine("####################################");
                Console.WriteLine("Résumé du compte de " + Proprietaire);
                Console.WriteLine("####################################");
                Console.WriteLine("Compte épargne entreprise de " + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine("Taux d'abonnement:"+ Taux_DAbonnement);
                base.AfficherHistorique();
                Console.WriteLine("####################################");
     
            }
     
            public static void PourcentageAnnuel(Compte_epargne_entreprise compte)
            {
                compte.Solde += compte.Solde * compte.Taux_DAbonnement;
            }
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class Compte_Courant : Compte
        {
     
            public int DecouvertAutorise { get; set; }
            public Compte_Courant(string nom) : base(nom) { }
     
            public void AfficherResumeCompte()
            {
                Console.WriteLine("************************************");
                Console.WriteLine("Résumé du compte de " + Proprietaire);
                Console.WriteLine("************************************");
                Console.WriteLine("Compte courant de " + Proprietaire);
                Console.WriteLine("Solde:" + Solde);
                Console.WriteLine("Découvert autorisé:" + DecouvertAutorise);
                base.AfficherHistorique();
     
     
                Console.WriteLine("************************************");
            }
     
     
     
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteCourantNicolas:Compte_Courant
        {
            public CompteCourantNicolas(string nom) : base(nom) { }
        }
    }
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteEpargneEntrepriseNicolas:Compte_epargne_entreprise
        {
            public CompteEpargneEntrepriseNicolas(string nom) : base(nom) { }
        }
    }
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Application_BIS
    {
        class CompteCourantJeremy:Compte_Courant
        {
            public CompteCourantJeremy(string nom) : base(nom) { }
        }
    }
    Faut il créer à chaque fois une classe dérivée (comme je l'ai fais) pour créer un objet similaire?
    Ou existe t'il une autre méthode?
    Comment fait on dans les jeux vidéos où un chevalier doit combattre 100 gnomes(!) ?

    Sinon qu'est ce que vous en pensez de mon code?

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Inutile de répéter 100 fois la même question.

    Le fait est que je ne vois pas ce que tu veux dire par "créer à chaque fois une classe dérivée", et surtout je ne vois pas où est le problème.
    Tu sais qu'il existe une touche F1, ainsi qu'une documentation MSDN où tu trouveras plein d'exemples pour t'aider...

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Et bien dans mon code pour avoir plusieurs objets de la classe Compte_Courant, j'ai crée une classe CompteCourantNicolas et une classe CompteCourantJeremy.
    En regardant la correction du TP, j'ai remarqué qu'on a justement crée 2 objets du type Compte_Courant sans procéder à ma manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CompteCourant compteNicolas = new CompteCourant(2000) { Proprietaire = "Nicolas" };
    CompteCourant compteJeremie = new CompteCourant(500) { Proprietaire = "Jérémie" };
    Après réflexion je viens de comprendre que finalement ces objets avaient des instances différentes.
    Donc le problème est réglé.

    Merci pour tous.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/03/2012, 11h32
  2. [WSDL2Java] Bug dans la génération des classes métiers
    Par adionne dans le forum Services Web
    Réponses: 1
    Dernier message: 21/09/2007, 12h06
  3. Réponses: 2
    Dernier message: 27/06/2007, 13h40

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