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 :

Intérêt d'un petit Using dans le code ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 206
    Par défaut Intérêt d'un petit Using dans le code ?
    Bonjour

    Je suis tombé (aïe) sur ce 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
    16
    17
    18
    19
    20
    21
    22
    23
     
      internal static class ObjectCloner
      {
        /// <summary>
        /// Clones an object by using the
        /// <see cref="BinaryFormatter" />.
        /// </summary>
        /// <param name="obj">The object to clone.</param>
        /// <remarks>
        /// The object to be cloned must be serializable.
        /// </remarks>
        public static object Clone(object obj)
        {
          using (MemoryStream buffer = new MemoryStream())
          {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, obj);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
          }
        }
      }
    Je me demande quelle est l'utilité de faire ce qui ressemble à un mini namespace : using (MemoryStream buffer = new MemoryStream()).
    Merci de vos lumières

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par Promeneur
    Je suis tombé (aïe) sur ce bout de code :
    J'espère que tu t'es pas fait mal

    Citation Envoyé par Promeneur
    Je me demande quelle est l'utilité de faire ce qui ressemble à un mini namespace : using (MemoryStream buffer = new MemoryStream()).
    Merci de vos lumières
    Ce n'est absolument pas un using au sens namespace du terme ... C'est une des abération du C#.

    En effet le using() dans un code défini l'utilisation d'une ressource necessitant l'appel à Dispose à la fait de son utilisation.

    En clair le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static object Clone(object obj)
        {
          using (MemoryStream buffer = new MemoryStream())
          {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, obj);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
          }
        }
    et equivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static object Clone(object obj)
        {
          MemoryStream buffer = new MemoryStream();
     
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, obj);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            buffer.Dispose();
    return temp;
     
        }
    Alors pourquoi deux façon de faire ?

    tout simplement parce qu'avec la méthode using peut importe la façon dont le code est quitté (exemple en cas d'exception) l'appel à dispose sera toujours fait, ce qui est très très interessant si on veut éviter les fuites mémoire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Par défaut
    Le using a l'intérieur d'un code permet de définir une portée, en dehors de laquelle l'objet sera supprimé.

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par 0xYg3n3
    Le using a l'intérieur d'un code permet de définir une portée, en dehors de laquelle l'objet sera supprimé.
    non ... pas exactement ça va plus loin que ça cf message au dessus

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 206
    Par défaut
    Ah ok, j'ignorais cette façon particluilière de s'assurer que la méthode Dispose () soit appelée. Merci

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

Discussions similaires

  1. petit souci dans mon code
    Par Cyang dans le forum Débuter
    Réponses: 3
    Dernier message: 05/07/2010, 12h30
  2. petit probleme dans mon code
    Par laconst dans le forum Excel
    Réponses: 1
    Dernier message: 16/07/2009, 16h10
  3. un petit probleme dans mon code
    Par hanene_z dans le forum C
    Réponses: 9
    Dernier message: 22/12/2006, 17h06
  4. petit pb dans un code
    Par tatiana21 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 12/11/2005, 22h55
  5. petit probleme dans un code : theoreme de pythagore
    Par ETI-trian dans le forum C++
    Réponses: 3
    Dernier message: 15/10/2005, 13h13

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