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

C# Discussion :

Using(..) Et Exceptions


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Using(..) Et Exceptions
    Bonjour,

    J'avais qq questions de débutant a propos de using et des exceptions :

    1)Est-ce que la method Dispose marche sur un objet même si celui-ci est Null ? Car 95% du code que j’ai trouve sur internet ne vérifie jamais dans un Finally si l’objet est Null ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    MyObj o = null ;
    Try
    {
    O = new MyObj() ;
    …
    }
    Catch(Exception e)
    {}
    Finally
    {
    o.dispose() ; // Mais si o est tjs Null alors ?
    }

    2) Si j’ai bien compris en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Using(MyClass o = new MyClass())
    {
    Code
    } //Ici l’objet Myclass sera libérée s' il y a des unmanaged ressources.
    Donc je n’ai pas besoin d’utilise o.Dipose() ou o.Close() ?

    3) J’ai vu bcp de code qui remplacent des try/catch par un Using par exemple :
    A la place de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try
    {
    SqlDataReader reader = command.ExecuteReader()
    }
    Catch(Exception e)
    {
    Code
    }
    Finally
    {
    code
    }
    On remplace cela par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using (SqlConnection fnet = new SqlConnection(connectionString))
    {
    }
    Mais dans le cas du Using, qu’est ce qui arrive s’il y a une exception? Elle est renvoyée au niveau au dessus si on met pas le Using dans un try/catch?

    4) Est-ce que dans un Using tous les objets qui utilisent des unmanaged ressources seront libérés ou seul l’objet déclaré entre les () du Using ?
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using (SqlConnection fnet = new SqlConnection(connectionString))
    {
    MyClass o = new MyClass() ; //Ma class avec du unmanaged ressources//Est-ce que ici j’ai besoin de faire o.Dipose() ?
    }
    Merci.

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par vigiElf Voir le message
    Est-ce que la method Dispose marche sur un objet même si celui-ci est Null ?
    Bien sûr que non, tu ne peux pas appeler les membres d'un objet non instancié. A l'exécution tu auras une belle NullReferenceException. Il faut tester la référence et si elle est non nulle on peut appeler la méthode.

    Citation Envoyé par vigiElf Voir le message
    Si j’ai bien compris en utilisant
    ...
    Donc je n’ai pas besoin d’utiliser o.Dipose() ou o.Close() ?
    Oui.

    Citation Envoyé par vigiElf Voir le message
    J’ai vu bcp de code qui remplacent des try/catch par un Using par exemple :
    ...
    Mais dans le cas du Using, qu’est ce qui arrive s’il y a une exception? Elle est renvoyée au niveau au dessus si on met pas le Using dans un try/catch ?
    Le using correspond à un try/finally. Si une exception est levée le finally libère les ressources et l'exception remonte. Il faut donc un try/catch pour récupérer cette exception.

    Citation Envoyé par vigiElf Voir le message
    Est-ce que dans un Using tous les objets qui utilisent des unmanaged ressources seront libérés ou seul l’objet déclaré entre les () du Using ?
    Seulement le ou les objets déclaré entre les parenthèses.

    Pour info : http://msdn.microsoft.com/fr-fr/library/yh598w02.aspx

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci bcp StormimOn.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2013, 16h22
  2. Exception:CS, job already in use RFC 00101.
    Par Haopl dans le forum Deski
    Réponses: 7
    Dernier message: 23/01/2012, 17h01
  3. Réponses: 5
    Dernier message: 22/12/2011, 02h11
  4. [BOE XI R2] exception cs:job already in use
    Par bdebacq dans le forum Deski
    Réponses: 6
    Dernier message: 09/05/2008, 17h39
  5. Bind Exception: Address already in use: connect
    Par metalcoyote dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 19/06/2007, 09h55

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