我创建了一个新的Pen对象:
Private NewPen As New Pen(New SolidBrush(Color.FromArgb(12,52,220)))
Run Code Online (Sandbox Code Playgroud)
当我现在打电话的NewPen.Dispose时候,它还处理SolidBrush我用来制作笔的笔,或者我是否必须单独处理它?
不.您的代码段中的Private关键字是您犯错误的唯一真实提示.这意味着你使笔成为一个类的领域.这绝对不是正确的事情,绘制对象创建起来非常便宜(大约一微秒)但保持昂贵.它们在桌面堆上分配,该桌面上运行的所有程序都需要共享.你永远不想在那堆不必要地占据空间.
始终在需要时创建绘图对象.这使您可以使用Using语句陷入成功之中:
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
Run Code Online (Sandbox Code Playgroud)
对于许多程序员来说,这往往是非常不直观的,他们通常知道保持对象并重新使用它们是一件好事.您需要记住的一般规则是,一次性物体通常是相反的.有些类型的对象创建起来很昂贵,所以似乎值得保留它们.然而,.NET Framework总是努力缓存它们本身.Font类就是一个很好的例子.