usted todavía tiene que deshacerse de él cuando haya terminado.
Por ejemplo, se puede llamar así:
using (Pen p = CreatePenFromColor(color))
{
// do something
}
Si un método devuelve un objeto IDisposable, es su deber de deshacerse de él.
[Editar] Ahora tengo la pregunta: estás usando el constructor Pen (Brush b).
a. En este caso, parece que la pluma no necesita la instancia cepillo después de constructor, por lo que su método podría tener este aspecto:
public Pen CreatePenFromColor(Color c)
{
using (Brush b = new SolidBrush(c))
{ return new Pen(b); }
}
b. ¿Por qué no simplemente usar Pen(Color color)?
public Pen CreatePenFromColor(Color c)
{
return new Pen(c);
}
c. (En relación con el comentario) Si la pluma sostendría una referencia al cepillo internamente, entonces no sería capaz de deshacerse de él antes de que haya terminado con la pluma. En ese caso, me gustaría ir para una clase que hacer el trabajo para mí:
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();
}
}
y luego usarlo como esto:
using (PenHelper penHelper = new PenHelper(Color.Black))
{
using (Pen pen = penHelper.CreatePen())
{
// do stuff
}
}
responsabilidad: IDisposable no se implementa de acuerdo con las directrices, pero más bien solo para demostración. Además, todo el ejemplo se utiliza sólo para mostrar cómo encapsular una referencia cuando sea necesario. Deberías ir por el bolígrafo (color) por supuesto.
O.o Yo no sabía que Brush y Pen implementan IDisposable ... –
lol, ciertamente lo es. –
¿Pero dónde se hace referencia a este pincel? ¿Por qué (y dónde) lo estás creando si solo estás devolviendo un Pen como resultado del método? – Groo