Podam tutaj w skróconej wersji wzorzec, ponieważ chcę go mieć pod ręką dla zbrodniczej praktyki Ctrl+C, Ctrl+V.
Klasa bazowa z IDisposable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class MyClass : IDisposable { ~MyClass() { Dispose(false); } public void Dispose() { // ta metoda MUSI zawsze wyglądać tak samo Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // Zwolnij zasoby zarządzalne } // Zwolnij zasoby niezarządzalne, // których właścicielem jest wyłącznie ten obiekt } } |
Klasa dziedzicząca po klasie implementującej IDisposable
1 2 3 4 5 6 7 8 9 10 11 12 |
public class MyDerivedClass : MyClass { protected override void Dispose(bool disposing) { if (disposing) { // Zwolnij zasoby zarządzalne } // Zwolnij zasoby niezarządzalne, // których właścicielem jest wyłącznie ten obiekt base.Dispose(disposing); } } |
Źródła
- Dispose Pattern na Developer Network
- Albahari, Joseph; Ben Albahari (2010-01-20). C# 4.0 in a Nutshell: The Definitive Reference