[Résolu] [VB.Net] Accès variable de type Generic.List(Of ...) dans

Accès variable de type Generic.List(Of ...) dans [Résolu] [VB.Net] - C#/.NET managed - Programmation

Marsh Posté le 02-08-2006 à 15:29:56    

Bonjour,
 
Je continue mon auto-formation au .Net et je rencontre une difficulté.
J'ai créé cette classe au sein de mon projet.
Il s'agit d'une classe "Partie" qui contient une variable privée "Joueurs" de type Generic.List(Of Joueur)
 
J'ai créé une Property Joueurs pour pouvoir accéder à cette variable depuis une instance de "Partie" afin de pouvoir écrire ce genre de code dans le code de ma Form :
 
Dim laPartie as New Partie()
Dim monJoueur as New Joueur()
et
laPartie.Joueurs.add(monJoueur)
 
Pourquoi le code dans le "Set" de ma propriété Joueurs ne s'exécute pas ?
 
Voici le code de ma classe "Partie"
 
Public Class Partie
    Private _phase As Integer
    Private _pot As Integer
    Private _numPartie As String
    Private _joueurs As New System.Collections.Generic.List(Of Joueur)
    Private _coups As New System.Collections.Generic.List(Of Coup)
    Private Shared _nbCoups As Integer
 
    Public Property NumPartie() As String
        Get
            Return _numPartie
        End Get
        Set(ByVal Value As String)
            _numPartie = Value
        End Set
    End Property
 
    Public Property PhaseEncours() As Integer
        Get
            Return _phase
        End Get
        Set(ByVal Value As Integer)
            _phase = Value
        End Set
    End Property
 
    Public Shared ReadOnly Property NbCoups() As Integer
        Get
            Return _nbCoups
        End Get
    End Property
 
    Public Property Joueurs() As System.Collections.Generic.List(Of Joueur)
        Get
            Return _joueurs
        End Get
        Set(ByVal Value As System.Collections.Generic.List(Of Joueur))
            MsgBox("je suis dans le Set de la property joueurs() dans la classe partie" )          ' <----- Ne s'affiche jamais... pourquoi ?
            _joueurs = Value
        End Set
    End Property
 
    Public ReadOnly Property Joueurs(ByVal nomJoueur As String) As Joueur
        Get
            Dim _joueurTemp As Joueur = Nothing
 
            For Each joueur As Joueur In _joueurs
                If joueur.nomJoueur = nomJoueur Then _joueurTemp = joueur
            Next
            Return _joueurTemp
        End Get
    End Property
 
    Public Property Coups() As System.Collections.Generic.List(Of Coup)
        Get
            Return _coups
        End Get
        Set(ByVal Value As System.Collections.Generic.List(Of Coup))
            MsgBox("dans le Set de property coups de partie.class" )                 '<------- Ne s'affiche jamais ? Pourquoi ? (idem ici)
            _nbCoups += 1
            _coups = Value
        End Set
    End Property
 
    Public Property Pot() As Integer
        Get
            Return _pot
        End Get
        Set(ByVal Value As Integer)
            _pot = Value
        End Set
    End Property
 
    Sub New()
        _numPartie = ""
        _phase = 1
        _pot = 0
        _coups.Clear()
        _nbcoups = 0
        _joueurs.Clear()
    End Sub
 
End Class
 
 
Merci d'éclairer ma lanterne :)


Message édité par 007seb le 03-08-2006 à 18:52:13
Reply

Marsh Posté le 02-08-2006 à 15:29:56   

Reply

Marsh Posté le 02-08-2006 à 23:06:05    

:bounce:  
 
A votre bon coeur Messieurs Dames   :hello:

Reply

Marsh Posté le 03-08-2006 à 02:33:56    

Bon, ok, personne ne sait/veut répondre (mais je suis coutumier du fait, et je remets en question ma façon d'exposer le problème).
 
J'ai une variable _joueurs de type Generic.List(Of Joueur)
 
Joueur étant une classe toute bête avec une propriété nomJoueur as string et une propriété montantJoueur as integer
 
Comment puis-je arriver à faire :
 
msgbox ( _joueurs("toto" ).montantJoueur )
 
???
 
Je ne sais pas si je dois surcharger la classe Generic.List ou créer une classe qui en hérite (genre ListJoueur) et lui ajouter une fonction TrouveJoueur ? Une autre suggestion peut-être ?


Message édité par 007seb le 03-08-2006 à 02:36:11
Reply

Marsh Posté le 03-08-2006 à 10:12:40    

Dsl, mais
- VB.Net : moi pas comprendre
- .Net 2 : moi pas pratiquer
et je pense qu'on est pas mal dans ces cas sur ce forum, donc soit patient...
 
Une question : je comprends pas l'intérêt d'une liste generic dans ton cas...

Reply

Marsh Posté le 03-08-2006 à 18:51:51    

Merci _Mose_ pour ton intervention... j'ai toujours l'impression d'être le seul à qui on ne répond pas :)
 
Ta dernière phrase m'intéresse, j'avoue ne pas m'être posé trop longtemps la question quand j'ai vu que les Generic.List servaient à stocker des variables qui ont toutes le même type (à l'inverse des arraylists si je ne m'abuse).
 
Quoi qu'il en soit, j'ai trouvé ma solution ici pour ceux que ça intéresserait :
 
http://www.codeguru.com/vb/gen/vb_ [...] php/c6079/
 
Il s'agissait pour moi de pouvoir modifier la propriété par défaut "Item" afin d'entrer un index sous forme d'une Chaine et non d'un Integer, indice de la List.
 
Ce qui se conçoit bien s'énonce clairement dit le proverbe... j'ai l'impression d'avoir un peu de mal avec ma conception du problème et par conséquent, avec sa description !  
 
Encore merci à toi, et si tu pouvais m'en dire plus sur ta remarque, je suis preneur !
 
A+

Reply

Marsh Posté le 03-08-2006 à 19:26:51    

007seb a écrit :

Merci _Mose_ pour ton intervention... j'ai toujours l'impression d'être le seul à qui on ne répond pas :)

Lol, bah forcément : VB + .Net 2   c'est pas le plus courant (pour l'instant ?) :)

007seb a écrit :

Ta dernière phrase m'intéresse, j'avoue ne pas m'être posé trop longtemps la question quand j'ai vu que les Generic.List servaient à stocker des variables qui ont toutes le même type (à l'inverse des arraylists si je ne m'abuse).

Oui et non. Disons qu'une ArrayList stocke des variables qui ont toutes le même type : Object.
Après... faut faire du cast.

007seb a écrit :

Il s'agissait pour moi de pouvoir modifier la propriété par défaut "Item" afin d'entrer un index sous forme d'une Chaine et non d'un Integer, indice de la List.

Je ne comprend pas très bien les tenants et les aboutissants de ton code, mais dans une Hashtable, tu peux te servir de n'importe quel objet comme indice pour stocker une donnée. Donc pourquoi pas une chaine de caractère :

Code :
  1. MyClass myobject = new ...
  2. // ajouter une valeur
  3. myhashtable.Add("un", myobject); // équivalent à myhashtable["un"] = myobject;
  4. // lire une valeur
  5. if(myhashtable.Contains("un" ))
  6.   myobject = (MyClass)myhashtable["un"];

Après, si tu veux éviter de faire un cast à chaque fois que tu vas lire ta valeur, tu peux implémenter ta propre Hashtable et surcharger l'opérateur public object this[object key] comme ceci : public new MyClass this[object key].
L'opérateur new te permettant de changer la signature de la propriété pour qu'elle retourne un 'MyClass' au lieu d'un 'Object'.

Reply

Marsh Posté le 03-08-2006 à 22:09:32    

Ok, ça confirme donc ce que je pensais.
J'ai fait exactement la même chose avec le Generic.List, surcharger le Item(indice As Integer) par Item(nomJoueur As String) et ça marche bien, et le code me semble propre, je laisse donc comme ça. Niveau performances du code, vu le peu de données à traiter, je me satisfait très bien de cela.
 
Merci encore et A++

Reply

Marsh Posté le 20-11-2006 à 19:23:23    

Bonsoir,
 
J'ai le même probléme que toi seb 007, tu as trouvé une solution ?
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed