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

Windows Forms Discussion :

Création d'un destructeur de classe


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut Création d'un destructeur de classe
    Bonjour,

    J'aimerais savoir comment faire pour créer le destructeur de ma classe.

    J'ai regardé le msdn de VB2005 express mais j'ai un peu de mal à comprendre.

    Si quelqu'un pourrait m'expliquer comment faire ou me renvoyer vers un lien, je lui serais bien reconnaissant.

    Voici le code de ma class. (la variable "LaPosition" est une énumération)

    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
     
    'Classe pour changer le type d'affichage du papier-peint de windows.
    Public Class Type_Affichage
     
        Private TileWpallpaper As String
        Private Wallpaper As String
     
       'Affectation des variables
        Public Sub position(ByVal LaPosition As type_position)
     
            Select Case LaPosition
     
                Case type_position.centrer : Me.TileWpallpaper = "0"
                    Me.Wallpaper = "1"
                Case type_position.etirer : Me.TileWpallpaper = "0"
                    Me.Wallpaper = "2"
                Case type_position.mosaique : Me.TileWpallpaper = "1"
                    Me.Wallpaper = "1"
     
            End Select
     
        End Sub
     
        Public Function retourne_TileWallpaper() As String
     
            Return Me.TileWpallpaper
     
        End Function
     
        Public Function retourne_Wallpaper() As String
     
            Return Me.Wallpaper
     
        End Function
     
    End Class
    Une autre question me vient, j'espère qu'elle n'est pas "débile" :
    Pour affecter ou retourner les valeurs de mes variables TileWallpaper et Wallpaper, mieux vaut-il créer des fonctions comme j'ai fait ou plutôt faire avec des PROPERTY... SET et GET ou bien, peut importe, le résultat est identique ?

    Merci pour vos réponses.

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Qu'est ce que tu veux détruire dans ta classe ?
    Tu utilises des ressources non-managées ? Si non, ce n'est pas la peine de t'embéter avec un "destructeur", notion qui n'existe d'ailleurs pas en tant que telle du fait du ramasse-miettes.

    Pour ta deuxième question, les get/set sont avantageusement remplacés par une propriété. Cela dit au niveau du code généré, c'est la même chose, mais disons que ça simplifie les choses pour ceux qui vont utiliser ta classe, c'est plus agréable d'utiliser des propriétés que des get/set.

  3. #3
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Merci SaumonAgile pour tes réponses.

    Ce que je veux détruire dans ma classe ? Eh bien, disons que, comme je cré un objet je pensais qu'il fallait le détruire une fois qu'il n'était plus d'utilité afin de libérer des ressources mémoires. Me tromperais-je ?

    Des ressources non-managées ? Je ne sais pas ce que c'est, si tu pouvais m'éclairer ce serait sympa.

    Donc si je comprends bien, je devrais plutôt privilégié ce type 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
     
     
     Property Nom_Propriete() As Integer
            Get
    .
    .
            End Get
     
            Set(ByVal Value As Integer)
    .
    .
            End Set
        End Property
    Plutôt que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     Public sub Affectation() 
     
        Une_Variable="blabla"
     
    End sub
     
    Public Function Recup_Val_Variable() As String
     
            Return Une_Variable
     
    End Function
    ??

    Encore merci.

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Le framework intègre un ramasse-miettes (garbage collector), il regarde périodiquement si les objets sont encore vivants (utilisés, cad ont des références), si ce n'est pas le cas, l'objet est détruit automatiquement. Donc tu n'as pas à te soucier de la destruction des objets. SAUF dans le cas où tu utilises des ressources non managées, cad en général des objets du système d'exploitation ou des objets provenant de DLL natives. Dans ce cas, il est nécessaire de fournir une sorte de destructeur pour libérer ces ressources non-managées.
    Donc si tu n'utilises que des objets managés (du framework ou tes propres assembly), tu n'a pas besoin de te soucier de ce genre de problème de mémoire, on n'est pas en C++

    Concernant ta deuxième question, la réponse est oui.

  5. #5
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Je te remercie pour ces explications.

    En revanche, j'ai 2 dernières questions et je passe le post en résolu.

    Tu dis, je cite : "SAUF dans le cas où tu utilises des ressources non managées, cad en général des objets du système d'exploitation ou des objets provenant de DLL natives. Dans ce cas, il est nécessaire de fournir une sorte de destructeur pour libérer ces ressources non-managées."

    Dans mon programme, j'ai utilisé l'API "SystemParametersInfo" provenant de "User32.dll". Quand tu parles de DLL native, est-ce que celle-ci en fait partie ?

    Pour finir, pourrais-tu me donner un exemple d'objet du système d'exploitation ?

    Encore une fois, merci à toi.

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par hellspawn_ludo Voir le message
    Je te remercie pour ces explications.

    En revanche, j'ai 2 dernières questions et je passe le post en résolu.

    Tu dis, je cite : "SAUF dans le cas où tu utilises des ressources non managées, cad en général des objets du système d'exploitation ou des objets provenant de DLL natives. Dans ce cas, il est nécessaire de fournir une sorte de destructeur pour libérer ces ressources non-managées."

    Dans mon programme, j'ai utilisé l'API "SystemParametersInfo" provenant de "User32.dll". Quand tu parles de DLL native, est-ce que celle-ci en fait partie ?
    Oui mais tu ne crées pas d'objets, dans le sens, tu ne manipules pas directement des ressources du système. Par exemple, tu as besoin d'un destructeur quand tu crées une fenêtre en utilisant directement l'API win32, là tu devras utiliser le handle de cette fenêtre pour le libérer quand ton objet n'est plus utilisé.
    Citation Envoyé par hellspawn_ludo Voir le message
    Pour finir, pourrais-tu me donner un exemple d'objet du système d'exploitation ?
    Dans l'exemple précédent, le handle est considéré comme une ressource non managée, car il est créé en appelant une DLL native et non pas en passant par les classes du System.Windows.Forms.

  7. #7
    Membre actif Avatar de hellspawn_ludo
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 257
    Points : 215
    Points
    215
    Par défaut
    Merci à toi pour toutes ces précisions.

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

Discussions similaires

  1. Création d'un object sur classe dynamique
    Par TicTacToe dans le forum Delphi
    Réponses: 16
    Dernier message: 16/04/2007, 17h49
  2. [POO] Création dynamique de variables de classe
    Par Philoulheinz dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 15h38
  3. Destructeur de classe - remise à NULL
    Par buzzkaido dans le forum C++
    Réponses: 33
    Dernier message: 23/03/2007, 15h59
  4. Réponses: 13
    Dernier message: 27/02/2007, 11h31
  5. Restreindre la création d'instance d'un classe
    Par >-|-|-|-|-[°> dans le forum C++
    Réponses: 12
    Dernier message: 10/01/2006, 19h11

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