Po zakończeniu pracy musisz go wyrzucić.
Na przykład, można nazwać tak:
using (Pen p = CreatePenFromColor(color))
{
// do something
}
Jeśli metoda zwraca IDisposable obiektu, to jest twój obowiązek, aby go zbyć.
[Edytuj] Teraz mam pytanie - używasz konstruktora Pen (Brush b).
a. W tym przypadku wydaje się, że Pen nie potrzebuje instancji Brush po konstruktorze, więc Twoja metoda może wyglądać następująco:
public Pen CreatePenFromColor(Color c)
{
using (Brush b = new SolidBrush(c))
{ return new Pen(b); }
}
b. Dlaczego po prostu nie użyć Pen(Color color)?
public Pen CreatePenFromColor(Color c)
{
return new Pen(c);
}
c. (w odniesieniu do komentarza) Jeśli pióro miałoby wewnętrzną referencję do pędzla, nie byłbyś w stanie go wyrzucić przed skończeniem długopisu. W tym przypadku, chciałbym iść do klasy, która będzie wykonać zadanie dla mnie:
public class PenHelper : IDisposable
{
private readonly Brush _brush;
public PenHelper(Color color)
{
_brush = new SolidBrush(color);
}
public Pen CreatePen()
{
return new Pen(_brush);
}
public void Dispose()
{
_brush.Dispose();
}
}
a następnie wykorzystać go tak:
using (PenHelper penHelper = new PenHelper(Color.Black))
{
using (Pen pen = penHelper.CreatePen())
{
// do stuff
}
}
Zastrzeżenie: IDisposable nie jest realizowany zgodnie z wytycznymi, ale raczej tylko do demonstracji. Cały przykład jest używany tylko do pokazania, jak enkapsulować referencję, gdy jest taka potrzeba. Powinieneś pójść na Pen (kolor) oczywiście.
o.O Nie wiedziałem, że Brush and Pen implementuje IDisposable ... –
lol, to na pewno robi. –
Ale gdzie jest ten odnośnik? Dlaczego (i gdzie) tworzysz je, jeśli zwracasz tylko pióro jako wynik metody? – Groo