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 :

[VB.Net 1.1] Quels sont les traitements possibles dans un Constructeur ?


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut [VB.Net 1.1] Quels sont les traitements possibles dans un Constructeur ?
    Salut à tous !

    Est-il possible d'effectuer dans un New des traitements autres que de la simple affectation des données ? par exemple quelquechose comme ça:

    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
     
     
    Public Sub New(ByVal cpt as Integer)
     
      Var1 = "abcd"
     
      If cpt < 2 Then
        Try
           //Opération de lecture dans un fichier d'ini avec un StreamReader
        Catch e as Axception
        End Try
      End If
     
      //etc
     
    End Sub
    J'avais vu je ne sais plus ou qu'il était préférable de se limiter à de la simple initialisation. Quels sont les soucis alors ?

    D'avance merci !
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Salut,

    Il est classique de faire ce genre de choses en programmation, ça s'appelle "Resource Acquisition Is Initialisation" ou RAII. Seulement c'est plus adapté aux langages qui disposent d'un destructeur appelé de manière déterministe (qd la variable sort du scope en général), car si tu alloues des ressources dans le constructeur, il faut pouvoir les libérer également, et le plus tôt est le mieux !
    La remarque est importante car en .Net tu n'as pas de destructeur mais éventuellement un finalizer qui sera appelé un peu n'importe qd par le garbage collector. Du coup si tu as alloué dans ton constructeur des ressources non managées importantes (handle de fichier, connexion base de donnée, mémoire non managée...) tu risques vite de te retrouver à cours de cette ressource et tu as un ressources leak (pour les ressources managées ce n'est pas un probleme : de tte façon c'est le GC qui s'en occupe).
    Cela dit en C# (et VB.net 2 je crois) on est un peu sauvé par l'interface IDisposable et le mot clé using , qui garanti que la méthode Dispose sera appelée dés la sortie du using, mais encore faut-il que l'utilisateur de ta classe pense à le faire...

    EDIT : un article intéressant (en anglais) sur le sujet ici : http://www.hackcraft.net/raii/


    Hum , aprés relecture de ton post, je crois que je suis un peu hors sujet, vu que tu n'as pas l'air d'allouer grand chose dans ton constructeur . Donc la seule chose qui pourrait poser probleme avec un traitement compliqué dans le constructeur, c'est qu'une exception soit lancée. Ce n'est pas un probleme en soit, faut juste etre prévenu et penser à le traiter.

  3. #3
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    Merci Sphax !

    Le seul truc compliqué que je souhaite faire c'est dans mon Try...Catch,
    Soit j'utilise un StreamReader pour lire une valeur dans un fichier, ou bien j'utilise une instance d'une classe basée sur les APIs pour lire un fichier d'Ini.
    C'est tout.
    Pas de contre-indication ?

    En tout cas tu auras enrichi ma culture perso concernant le RAII
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Pas de contre-indication, a condition bien sur de bien refermer ton fichier dans un finally , et penser que tu peux te prendre tout un tas d'exception si le fichier n'existe pas, si t'as pas les droits etc...

    Pour le RAII oui je l'ai laissé pour ça, ça peut toujours servir

  5. #5
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    Ok ça roule ! encore merci !
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

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

Discussions similaires

  1. Quels sont les évènements important dans Outlook
    Par Heureux-oli dans le forum Contribuez
    Réponses: 0
    Dernier message: 14/11/2007, 15h32
  2. Réponses: 7
    Dernier message: 06/03/2006, 17h50
  3. Réponses: 1
    Dernier message: 14/11/2005, 11h04
  4. Quels sont les caracteres interdits dans ACCESS?
    Par DocA dans le forum Access
    Réponses: 14
    Dernier message: 17/06/2005, 14h33

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