Вы все еще должны избавиться от него, когда закончите.
Например, вы можете назвать это так:
using (Pen p = CreatePenFromColor(color))
{
// do something
}
Если метод возвращает объект IDisposable, его обязанностью является его удаление.
[Редактировать] Теперь у меня возник вопрос - вы используете конструктор Pen (Brush b).
а. В этом случае кажется, что Pen не нужен экземпляр Brush после конструктора, поэтому ваш метод может выглядеть следующим образом:
public Pen CreatePenFromColor(Color c)
{
using (Brush b = new SolidBrush(c))
{ return new Pen(b); }
}
б. Почему бы просто не использовать Ручка (цветной цвет) ?
public Pen CreatePenFromColor(Color c)
{
return new Pen(c);
}
с. (относительно комментария) Если перо будет содержать ссылку на Кисть внутри, то вы не сможете утилизировать ее до того, как закончите работу с пером. В этом случае я пошел бы на урок, который сделал бы работу за меня:
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();
}
}
и затем используйте его так:
using (PenHelper penHelper = new PenHelper(Color.Black))
{
using (Pen pen = penHelper.CreatePen())
{
// do stuff
}
}
Отказ от ответственности: IDisposable не реализован в соответствии с руководящими принципами, а только для демонстрации. Кроме того, весь пример используется только для того, чтобы показать, как инкапсулировать ссылку, когда это необходимо. Вы должны пойти на Pen (цвет), конечно.