私人字体和画笔是邪恶的吗?

时间:2010-12-23 13:49:06

标签: c# .net optimization gdi+

我有一些将字体和画笔作为私有字段的类。有些东西说我这不是正确的做法,应该避免,但我不知道为什么....(Darn subconsiousness :-))

这是真的,为什么这是不好的做法?

class SomeControl: Panel
{
    private Font titelFont = new Font("Arial", 8.25f, FontStyle.Bold);        
    private SolidBrush whiteBrush = new SolidBrush(Color.White);


    public SomeControl()
    {
        //Do stuff
    }
}

4 个答案:

答案 0 :(得分:5)

我不明白为什么这很糟糕。

使用画笔时,你已经有静态Brushes class,你可能想要重复使用而不是创建自己的画笔(就像你使用普通颜色一样)。

例如,您可以直接使用whiteBrush,而不是创建Brushes.White

当然,它只为您提供一组通用画笔,因此您仍然需要为任何其他颜色创建自己的画笔。

请记住,字体和画笔必须正确处理。这意味着当您使用自己的字体和画笔作为属性或类的字段时,此类必须实现IDisposable并正确处理这些字体和画笔。

答案 1 :(得分:5)

让他们私下看起来很好。

但您应该将它们设为静态或覆盖Dispose中的SomeControl方法并在其中部署titelFontwhiteBrush

如果不将它们设置为公共属性,也很难在设计器中配置字体和画笔。

答案 2 :(得分:3)

棘手的是确保他们被处置......

但是(使其变得更难)只有当它们不是内置的系统画笔等时 - 因为它们并不真正属于你的形式。

如果它们在Dispose()中对话,那么这很好。否则它会慢慢泄漏手柄。 GC 可能会抓住它们,但这不是确定性的。

答案 3 :(得分:0)

如果你想从外面改变字体或者brushcolor,你必须把它变成一个公共财产,如果不是让它私有。

不要忘记将刷子与控件一起丢弃。 我个人只设置画笔的颜色,并在画笔上创建画笔。

private Color _WhiteBrush = Color.White;
public Color WhiteBrush
{
  get
  {
     return _WhiteBrush;
  }
  set
  {
    _WhiteBrush = value;
    this.Invalidate();
  }
}

protected override void OnPaint(PaintEventArgs e)
{
  using (SolidBrush sb = new SolidBrush(this.WhiteBrush))
  {
    e.Graphics.FillRectangle(sb, this.ClientRectangle);
  }
}