È ancora necessario smaltirlo quando hai finito.
Ad esempio, è possibile chiamare in questo modo:
using (Pen p = CreatePenFromColor(color))
{
// do something
}
Se un metodo restituisce un oggetto IDisposable, è vostro dovere di disporre di esso.
[Modifica] Ora ho ottenuto la domanda: si sta utilizzando il costruttore Pen (Brush b).
a. In questo caso, sembra che la penna non ha bisogno l'istanza pennello dopo costruttore, in modo che il metodo potrebbe essere la seguente:
public Pen CreatePenFromColor(Color c)
{
using (Brush b = new SolidBrush(c))
{ return new Pen(b); }
}
b. Perché non usare semplicemente Pen(Color color)?
public Pen CreatePenFromColor(Color c)
{
return new Pen(c);
}
c. (per quanto riguarda il commento) Se la Penna trattiene un riferimento al Pennello internamente, allora non si potrebbe disporne prima di aver terminato con la Penna. In tal caso, vorrei andare per una classe che avrebbe fatto il lavoro per me:
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();
}
}
e quindi utilizzarlo in questo modo:
using (PenHelper penHelper = new PenHelper(Color.Black))
{
using (Pen pen = penHelper.CreatePen())
{
// do stuff
}
}
Diniego: IDisposable non è implementata secondo le linee guida, ma piuttosto per la sola dimostrazione. Inoltre, l'intero esempio viene utilizzato solo per mostrare come incapsulare un riferimento quando necessario. Dovresti andare a Pen (colore), ovviamente.
o.O non sapevo che Pennello e penna implementati IDisposable ... –
lol, lo fa certamente. –
Ma dove si riferisce effettivamente questo pennello? Perché (e dove) lo stai creando se stai restituendo una penna solo come risultato del metodo? – Groo