W swoim przykładzie nie powinieneś pozbywać się przedmiotu, który został ci przedstawiony jako argument. Nie jest to zalecane, ponieważ obiekt ten może być używany poza twoją metodą. Utylizacja obiektów użytkowych powinna (zwykle) odbywać się w tej samej metodzie, w której ją tworzysz. Wyjątek dla obiektów klasy lub obiektów stanu.
Tak jak w przypadku innych odpowiedzi, użyj using
, aby utworzyć i wyrzucić obiekt. Jest to naprawdę wymagane tylko w przypadku obiektów wykorzystujących cenne zasoby, takie jak połączenie z bazą danych. Powiedziawszy, że zawsze powinieneś zadzwonić pod numer Dispose()
(jawnie lub przez using
), jeśli obiekt go implementuje, ponieważ oznacza to, że używa niezarządzanych lub dużych ilości zasobów.
Wszystkie obiekty .NET Framework, które nie będą wywoływać Dispose
na (w żaden sposób) zostaną ostatecznie automatycznie rozpoznane przez Garbage Collector. Prawidłowe wdrożenie interfejsu IDisposable
powinno mieć destruktor/finalizator, który wywołuje Dispose
. Ma to na celu zapewnienie, że cenne zasoby nie zostaną utracone tylko z powodu złego kodu. Twoje zasoby zostaną wydane znacznie później, ale będą i to jest ważne. W ten sposób zaimplementowane są wszystkie klasy jednorazowe w .NET i jak wszystkie klasy powinny implementować IDisposable
.
Kod powinien wyglądać następująco:
using(Graphics g = new Graphics())
{
SomeMethod(g)
{
...
}
}
Sprawdź this zaleceń Microsoftu na IDisposable.Dispose
metody.
Oprócz "nie", twoja metoda powinna również * nie * być odpowiedzialna za wyrzucenie obiektu graficznego. Ważne jest, aby czas życia obiektów graficznych był zarządzany w jednym miejscu - co oznacza, że należy go umieścić w tej samej klasie, która je utworzyła. Posiadanie obiektu w jakimś nieokreślonym miejscu w dół stosu wywołań sprawia, że kod jest trudny do zrozumienia i utrzymania, i może łatwo doprowadzić do błędów później. – MattDavey