C# Academy · Lekcja

IDisposable, instrukcja using

Proszę implementować IDisposable, używać instrukcji using do deterministycznego zwalniania zasobów oraz porównać ją z ręcznym try/finally. Tylko C# 6.

Lekcja 3 z 38 kroki

IDisposable, instrukcja using to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Po co IDisposable i using

Cel: Deterministycznie zwalniać zasoby.

  • Implementować IDisposable
  • Używać instrukcji using (C# 6)
  • Porównać z try/finally
  • Sprzątanie powinno być krótkie i bezpieczne

Implementowanie IDisposable

Zaimplementuj IDisposable.Dispose, aby zwalniać zasoby (pliki, gniazda i uchwyty). Zapewnij idempotentność tej metody.

using System;

// Simple disposable that tracks whether it was cleaned up
public sealed class FakeConnection : IDisposable
{
  public bool IsOpen { get; private set; }

  public FakeConnection()
  {
    IsOpen = true;
    Console.WriteLine("Open");
  }

  public void Dispose()
  {
    if (IsOpen)
    {
      IsOpen = false;
      Console.WriteLine("Close");
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    FakeConnection c = new FakeConnection();
    c.Dispose(); // manual cleanup
  }
}

Wzorzec try/finally

try/finally gwarantuje sprzątanie, ale jest rozwlekłe i łatwo o nim zapomnieć. Instrukcja using jest skróconym zapisem.

using System;

public sealed class FakeConnection : IDisposable
{
  public void Dispose() { Console.WriteLine("Dispose called"); }
  public void Send(string msg) { Console.WriteLine("Send: " + msg); }
}

public class Program
{
  public static void Main(string[] args)
  {
    // Manual try/finally
    FakeConnection a = null;
    try
    {
      a = new FakeConnection();
      a.Send("A");
      throw new Exception("boom");
    }
    finally
    {
      if (a != null) a.Dispose(); // runs even on exception
    }

    // unreachable due to thrown exception in this demo
  }
}

Demonstracja instrukcji using

Instrukcja using opakowuje ukryty blok try/finally; metoda Dispose jest wywoływana po zakończeniu bloku.

using System;

public sealed class FakeConnection : IDisposable
{
  public void Dispose() { Console.WriteLine("Dispose called"); }
  public void Work() { Console.WriteLine("Working"); }
}

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      using (FakeConnection c = new FakeConnection())
      {
        c.Work();
        throw new InvalidOperationException("oops");
      } // Dispose runs here automatically
    }
    catch (Exception)
    {
      Console.WriteLine("Handled");
    }
  }
}

Wejście/wyjście z using

Większość typów wejścia/wyjścia implementuje IDisposable. Używaj using, aby uchwyty były niezwłocznie zamykane.

using System;
using System.IO;

public class Program
{
  public static void Main(string[] args)
  {
    // Create a small temp file then read it
    string path = "demo.txt";
    File.WriteAllText(path, "hello");

    using (StreamReader r = new StreamReader(path))
    {
      string text = r.ReadToEnd();
      Console.WriteLine(text);
    } // r.Dispose() closes the file handle
  }
}

Wskazówki i pułapki dotyczące using

Wskazówki:

  • Preferuj using zamiast ręcznych wywołań Dispose.
  • Metoda Dispose powinna być krótka i bezpieczna (w miarę możliwości nie powinna zgłaszać wyjątków).
  • Nie używaj obiektów po ich zwolnieniu.
  • W przypadku wielu zasobów zagnieżdżaj bloki using, aby kontrolować kolejność.

Gwarancja instrukcji using

Szybkie sprawdzenie: Co instrukcja using gwarantuje w przypadku obiektu implementującego IDisposable?

Podsumowanie

Podsumowanie: Zaimplementuj IDisposable dla zasobów i umieść ich użycie w bloku using, aby zapewnić sprzątanie za pomocą ukrytego try/finally w C# 6.

Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „IDisposable, instrukcja using” jest bezpłatna?

Tak — pełny tekst „IDisposable, instrukcja using” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „IDisposable, instrukcja using”?

Proszę implementować IDisposable, używać instrukcji using do deterministycznego zwalniania zasobów oraz porównać ją z ręcznym try/finally. Tylko C# 6. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „IDisposable, instrukcja using”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. try/catch/finally, throw new a ponowne zgłaszanie
  2. Własne wyjątki i projektowanie błędów
  3. IDisposable, instrukcja using
← Powrót do C# Academy