为什么要在创建字体后立即处理字体?(Dispose()
当您不再使用它时,您仍然需要调用它)。您可以使用这两个示例中的代码,删除Dispose()
和时它们都可以using
:
Font f = new Font("Calibri", 10.0f);
textbox1.Font = f;
textbox2.Font = f;
label1.Font = f;
button1.Font = f;
或者(它的效率略低,因为您分配了更多不需要的资源,除非Font
构造函数管理一种缓存,我不确定):
textbox1.Font = new Font("Calibri", 10.0f);
textbox2.Font = new Font("Calibri", 10.0f);
label1.Font = new Font("Calibri", 10.0f);
button1.Font = new Font("Calibri", 10.0f);
编辑
关于资源处置的一点说明:当然,您应该始终在每次可能的时候处置资源(简单的规则是始终调用Dispose()
实现的类IDisposable
)。那就是说你必须在使用它之后才这样做,而不是之前。让我们看看这段代码:
var font = font;
textbox1.Font = font;
font.Dispose();
当然它不会起作用,因为textbox1
它引用了已处置的对象(我不知道会发生什么,一个ObjectDisposedException
?只是被忽略了?)。Dispose()
仅当您将来不再使用该资源时才应调用它,事实并非如此,因为它将被用于textbox1
绘制其文本。例如,正确的用法是:
using (var font = new Font("Calibri", 10.0f))
{
e.Graphics.DrawText(Text, font, Brushes.Black, ClientRectangle);
}
在这种情况下font
,仅由using
语句内部的代码使用,并且可以正确安全地处理(即使在这种情况下,您最好避免每次都创建它并且应该重用它)。