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

VB.NET Discussion :

Peut faire un Dispose d'une List(Of object) ?


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Peut faire un Dispose d'une List(Of object) ?
    Bonjour à tous,
    J'ai un petit soucis, je voudrais libérer les sources à la fin de mon application,
    J'ai 3 classes et 3 interfaces
    Interface IJouet
    Interface IEnfant
    Interface IParent

    Classe Jouet Implements Idisposable , IJouet
    Classe Enfant Implements Idisposable , IEnfant et qui contient une List(of IJouet)
    Classe Parent Idisposable , IParent et qui contient une List(of IEnfant)

    Je n'arrive pas à atteindre le Dispose de l'enfant et du Jouet.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    tu peux faire un .ForEach(Action<T>) sur ta liste dans le dispose de Parent, ensuite tu cascades le Dispose sur les enfants et jouets en refaisant la meme chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Class Parent
    Implements IDisposable
        Private enfantList As List(Of IEnfant)
        [...]
        Public Sub Dispose()
            enfantList.ForEach(New Action(Of IEnfant)(DisposeList))
        End Sub
        Private Sub DisposeList(ByVal enfant As IEnfant)
            enfant.Dispose()
        End Sub
    End Class
    et la meme dans Enfant.

    NB : code converti depuis C#.

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, je vois là logique mais lorsque je fais enfant.Dispose() il me dit que Dispose n'est pas un membre de IEnfant pour j'ai implémenter la class Enfant avec IDisposable.
    Donc dans ma classe Enfant j'ai bien :
    Public Sub Dispose() Implements IDisposable.Dispose

    Mais je n'arrive à atteindre enfant.Dispose() à partir de la class Parent.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    IDisposable, il ne faut pas l'implementer dans Enfant mais dans IEnfant, pour pouvoir l'avoir depuis ton interface.

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    On ne peut pas implementer une interface.

    Sinon j'ai trouvé la solution en m'inspirant de ton bout de 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
     
    Class Parent
    Implements IDisposable
        Private enfantList As List(Of IEnfant)
        [...]
        Public Sub Dispose()
            enfantList.ForEach(New Action(Of IEnfant)(DisposeList))
            enfantList.Clear()
        End Sub
     
        Private Sub DisposeList(ByVal enfant As IEnfant)
            Dim EnfantDispose As IDisposable = TryCast(enfant, IDisposable)
            EnfantDispose.Dispose()
         End Sub
    End Class
    Par contre je crois qu'on ne peut pas utiliser de foreach avec une SortedList, est qu'il y a un équivalent?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par MadLion Voir le message
    Bonjour,
    On ne peut pas implementer une interface.


    Par contre je crois qu'on ne peut pas utiliser de foreach avec une SortedList, est qu'il y a un équivalent?
    Grrr, 'semantics !' =p

    Je te proposais quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Class Enfant
    Implements IEnfant
        Public Sub Truc()
            Throw New NotImplementedException()
        End Sub
        Public Sub Dispose()
            Throw New NotImplementedException()
        End Sub
    End Class
     
    Interface IEnfant
    Inherits IDisposable
        Sub Truc()
    End Interface
    qui t'evitera le cast d'un IEnfant en IDisposable, puisqu'ici IEnfant est disposable directement (avant meme l'existence de la classe concrete implementant IEnfant).

    Pour le ForEach(Action<T>), c'est strictement equivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Class Enfant(Of T, U)
        Private test As SortedList(Of T, U)
        Sub ForEach(ByVal act As Action(Of U))
            For Each item As KeyValuePair(Of T, U) In test
                act(item.Value)
            Next
        End Sub
    End Class

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci beaucoup, ça fonctionne !
    Effectivement c'est mieux de faire hériter les class Enfants.

Discussions similaires

  1. [Débutant] web-service-rest-avec-wcf-3-5. comment faire un PUT d'une Liste d'object ?
    Par denfer06 dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 16/04/2014, 15h48
  2. Réponses: 23
    Dernier message: 08/06/2006, 16h06
  3. [HTML] faire des tabulation dans une liste <select>
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/01/2006, 00h36
  4. Selectionnet tous ou faire un clear sur une liste
    Par Canou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2004, 11h26
  5. Réponses: 3
    Dernier message: 02/07/2004, 14h53

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