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

 .NET Discussion :

Tableau shared dans un contructeur [VB.NET]


Sujet :

.NET

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut Tableau shared dans un contructeur
    Bonsoir. j'ai besoin de votre aide pour résoudre un problème.
    J'ai une classe Enfant avec un tableau shared. Je veux que chaque objet créé soit ajouté automatiquement au tableau. j'ai essayé ce constructeur mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Class Enfant
        Public nom As String
        Public age As Integer
        Public Shared tablo(20) As Enfant
        Public Shared x As Integer = 0
        Public Sub New(ByVal n As String, ByVal a As Integer)
            Me.nom = n
            Me.age = a
            Enfant.tablo(x) = New Enfant(nom, age)
            x += 1
        End Sub
    End Class
    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
     
    Module Module1
     
        Sub Main()
            Dim enf1 As New Enfant("Kamal", 12)
            Dim enf2 As New Enfant("Nadia", 14)
            Dim enf3 As New Enfant("Sara", 10)
            Dim enf4 As New Enfant("Lamiae", 13)
            Dim enf5 As New Enfant("Pascal", 12)
            Dim enf6 As New Enfant("Omar", 14)
     
            Console.WriteLine(Enfant.tablo(1).nom)
            Console.ReadKey()
     
     
        End Sub
     
    End Module
    Il me donne une erreur au niveau du constructeur: Une exception non gérée du type 'System.StackOverflowException' s'est produite dans ConsoleApplication1.exe
    Merci de votre aide
    J'apprends la programmation pour le plaisir

  2. #2
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Je ne suis pas trop VB, mais ça ne change pas grand chose.

    Le StackOverflow est logique puisqu’à chaque fois que tu créés un nouvel objet Enfant, dans son constructeur, tu en créés un autre nouvel objet Enfant, qui lui même en créé encore un dans son constructeur, etc.

    J'ai un peu de mal à voir ce que tu cherche à faire (comme dans ton autre poste d'ailleurs), mais si j’interprète, tu veux avoir une liste d'objet Enfant.
    En général, on fait une classe Enfant, qui la classe métier qui contient les propriétés de base (nom, prénom, age, ...) et une autre classe qui va te permettre de regrouper ces objets métiers (une liste).
    Par exemple : List<Enfant> enfants = new List<Enfant>();
    Ou alors en créant ta propre classe class Enfants : List<Enfant> et en l'utilisant de cette manière Enfants enfants = new Enfants();

    Essaye aussi d'oublier un peu les tableaux et de travailler avec les listes et dictionnaire, tu te simplifiera la vie.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  3. #3
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Bonsoir
    Merci Kyroon de votre réponse; maintenant je comprends mon erreur dans le constructeur (boucle infinie).
    Parc contre je ne trouve pas encore de solution à mon problème:
    Je veux que chaque objet créé soit ajouté automatiquement au tableau ou liste contenant les objets, par une instruction au niveau du constructeur de la classe Enfant.
    je ne veux pas cette solution:
    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
     
    Module Module1
     
        Sub Main()
            Dim enf1 As New Enfant("Kamal", 12)
            Dim enf2 As New Enfant("Nadia", 14)
            Dim enf3 As New Enfant("Sara", 10)
            Dim enf4 As New Enfant("Lamiae", 13)
            Dim enf5 As New Enfant("Pascal", 12)
            Dim enf6 As New Enfant("Omar", 14)
     
            Dim listEnf As New List(Of Enfant)
            listEnf.Add(enf1)
            listEnf.Add(enf2)
            listEnf.Add(enf3)
            listEnf.Add(enf4)
            listEnf.Add(enf5)
            listEnf.Add(enf6)
     
     
            For Each elem In listEnf
                Console.WriteLine(elem.nom & " ==== " & elem.age)
            Next
            Console.ReadKey()
     
     
        End Sub
     
    End Module
    merci
    J'apprends la programmation pour le plaisir

  4. #4
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Tu ne peux pas, enfin pas proprement et je ne te le conseil pas.

    Si tu veux que ton enfant soit ajouté directement à la liste, la meilleurs solution reste : listEnf.Add(New Enfant("Lamiae", 13));
    Ce qui revient à faire exactement la même chose que ce que tu as fait, mais sans passé par une variable intermédiaire.

    Une autre solution serait de travailler avec la classe Enfants (note le s) à laquelle tu pourrais ajouter une méthode Add(), qui prendrait en paramètre les propriétés d'un objet Enfant, cette méthode créerait l'objet Enfant et l'ajouterait à la liste.

    Bon je te donne quand même la solution que je ne te conseil pas car un objet métier n'a pas besoin de savoir qui le manipule, mais si tu veux vraiment faire comme ça...
    Ça serait de faire un constructeur qui prend en paramètre une liste, il te restera à faire dans le constructeur, le Add dans la liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Enfant(List<Enfant> list)
    {
        list.Add(this);
    }
    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  5. #5
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Bonsoir.
    merci beaucoup Kyroon, vous m'avez aidé à résoudre mon problème (mais je remarque que vous utilisez la syntaxe java et non VB, mais le principe est le même).
    Je viens même de l'améliorer un peu, en utilisant une liste pour les filles et une autre pour les garçons.
    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
     
    Public Class Enfant
        Public nom As String
        Public age As Integer
        Public Shared f As New List(Of Enfant) 'Groupe des filles
        Public Shared g As New List(Of Enfant) 'Groupe des garçons
     
        Public Sub New(ByVal n As String, ByVal a As Integer, ByVal lista As List(Of Enfant))
            nom = n
            age = a
            Enfants.ajouter(Me, lista)
     
        End Sub
     
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Class Enfants
        Public Shared Sub ajouter(ByVal enf As Enfant, ByVal lista As List(Of Enfant))
            lista.Add(enf)
     
        End Sub
    End Class
    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
     
    Module Module1
     
        Sub Main()
     
            Dim enf1 As New Enfant("Kamal", 12, Enfant.g)
            Dim enf2 As New Enfant("Nadia", 14, Enfant.f)
            Dim enf3 As New Enfant("Sara", 10, Enfant.f)
            Dim enf4 As New Enfant("Lamiae", 13, Enfant.f)
            Dim enf5 As New Enfant("Pascal", 12, Enfant.g)
            Dim enf6 As New Enfant("Omar", 14, Enfant.g)
     
            Console.WriteLine("Le groupe des garçons:")
            For Each elem In Enfant.g
                Console.WriteLine(elem.nom & "   " & elem.age)
            Next
            Console.WriteLine()
            Console.WriteLine("Le groupe des filles:")
     
            For Each elem In Enfant.f
                Console.WriteLine(elem.nom & "   " & elem.age)
            Next
     
            Console.ReadKey()
     
     
        End Sub
     
    End Module
    ça marche.
    une autre fois merci
    J'apprends la programmation pour le plaisir

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2009, 10h38
  2. initialiser un tableau 2D dans le main
    Par miminou dans le forum C++
    Réponses: 5
    Dernier message: 20/12/2005, 11h35
  3. Recuperer un tableau php dans javascript
    Par 17mounir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/08/2005, 10h07
  4. Bug Firefox sur tableau centré dans un div (mauvais refresh)
    Par FrankOVD dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/07/2005, 18h47
  5. [tableau]Valeur dans un tableau
    Par kisscool31 dans le forum Collection et Stream
    Réponses: 30
    Dernier message: 17/05/2005, 10h45

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