我有一些将字体和画笔作为私有字段的类。有些东西说我这不是正确的做法,应该避免,但我不知道为什么....(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
}
}
答案 0 :(得分:5)
我不明白为什么这很糟糕。
使用画笔时,你已经有静态Brushes
class,你可能想要重复使用而不是创建自己的画笔(就像你使用普通颜色一样)。
例如,您可以直接使用whiteBrush
,而不是创建Brushes.White
。
当然,它只为您提供一组通用画笔,因此您仍然需要为任何其他颜色创建自己的画笔。
请记住,字体和画笔必须正确处理。这意味着当您使用自己的字体和画笔作为属性或类的字段时,此类必须实现IDisposable
并正确处理这些字体和画笔。
答案 1 :(得分:5)
让他们私下看起来很好。
但您应该将它们设为静态或覆盖Dispose
中的SomeControl
方法并在其中部署titelFont
和whiteBrush
。
如果不将它们设置为公共属性,也很难在设计器中配置字体和画笔。
答案 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);
}
}