Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C#] Usare l'istruzione using

    ciao!
    da quanto ho capito tramite using, i vari stream (e non solo) vengono chiusi automaticamente.
    ho creato questa piccola funzioncina qua:
    codice:
    public static string takePwd()
            {
                FileStream fs = File.Open(@"config.txt", FileMode.Open);
                StreamReader reader = new StreamReader(fs);
                return reader.ReadToEnd();
            }
    tralasciando un attimo che non ho gesti le eccezioni, sinceramente non ho ben capito come usare using.
    su quale dei due oggetti dovrei usarla?

  2. #2
    using funziona su qualunque oggetto che implementi IDisposable; in questo caso, la cosa più semplice è fare:
    codice:
            public static string takePwd()
            {
                using(StreamReader reader = new StreamReader(File.Open(@"config.txt", FileMode.Open)))
                {
                    return reader.ReadToEnd();
                }
            }
    dato che il metodo Dispose dello StreamReader richiama il Dispose dello stream associato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    come ha detto MItaly va usato sugli oggetti che implementano IDisposable. questi oggetti hanno il metodo dispose che va usato subito, non appena hai finito di usare l'oggetto per liberare le risorse non gestite.
    Nel tuo codice quindi, oltre ai try-finally, non hai messo le chiamate ai Dispose() cosa che ti costa un leak di risorse non indifferente.
    La direttiva using va usata come ha riportato MItaly ed equivale a scrivere in modo piu conciso questo tipo di codice:

    codice:
    try
    {
      StreamReader reader = new StreamReader(File.Open(@"config.txt", FileMode.Open));
      //lavori...
      //return...
    }
    finally
    {
      reader.dispose();
    }
    MItaly l'ha scritto in modo da non creare una variabile fs ma puoi anche mettere due o piu using uno dentro l'altro, cosa che capita spesso:

    codice:
      using (FileStream fs = File.Open(@"config.txt", FileMode.Open))
      {
         using (StreamReader reader = new StreamReader(fs))
         {
                return reader.ReadToEnd();
         }
      }

  4. #4
    perfetto.
    capito perfettamente.
    grazie ad entrambi!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.