我创建了一个新的Pen对象:
Private NewPen As New Pen(New SolidBrush(Color.FromArgb(12,52,220)))
当我现在打电话给NewPen.Dispose
时,它是否还处理了我用来制作笔的SolidBrush
,还是我必须单独处理它?</ p>
答案 0 :(得分:7)
没有。您的代码段中的私有关键字是您犯错误的唯一真实提示。这意味着你使笔成为一个类的领域。这绝不是正确的事情,绘制对象非常便宜创建(大约一微秒),但保持昂贵。它们在桌面堆上分配,该桌面上运行的所有程序都需要共享。你永远不想在那堆不必要地占据空间。
始终在您需要时创建绘图对象。通过使用语句,您可以轻松获得成功:
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Using sbr = New SolidBrush(Color.FromArgb(12, 52, 220))
Using pen = New Pen(sbr)
'' Use the pen
''....
End Using
End Using
End Sub
这对许多程序员来说往往是非常不直观的,他们通常知道保持对象并重新使用它们是一件好事。您要记住的一般规则是,对于一次性物品,它通常是相反的。有些类型的对象创建起来很昂贵,所以似乎值得保留它们。然而,.NET Framework总是努力缓存它们本身。 Font类就是一个很好的例子。
答案 1 :(得分:3)
简单回答:否。 Pen类(单击以查看.net源代码)不存储对画笔的任何引用。你负责处理刷子。这就是为什么这会返回False
:
Using b As New SolidBrush(Color.Black)
Using p As New Pen(b)
Debug.WriteLine("Is equal: {0}", (b Is p.Brush))
End Using
End Using