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.
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
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.
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
- try/catch/finally, throw new a ponowne zgłaszanie
- Własne wyjątki i projektowanie błędów
- IDisposable, instrukcja using