在编写一个类似油漆的小型应用程序(为我自己)时,我最初在 onClick 处理程序中调用了以下代码:

g.DrawEllipse((new Pen(pencolour, penSize)), e.X, e.Y, 1, 1);

我后来改为
Pen pen1 = new Pen(pencolour, penSize);
g.DrawEllipse(pen1, e.X, e.Y, 1, 1);
pen1.Dispose();

我的问题是:这两段代码是等价的,还是第一段代码创建了永远不会被处理的 Pen 对象?

最佳答案

当垃圾收集器运行并确定对象不再使用时,它们就会被处理掉。最好自己处理对象,以便立即释放资源。

还要考虑使用 using 语句:

using (Pen pen1 = new Pen(pencolour, penSize))
{
    g.DrawEllipse(pen1, e.X, e.Y, 1, 1);
}

这会自动处理 Pen,即使 DrawEllipse 会抛出异常,并且 IDE 将强制 pen1 仅在 using 块中可用。

10-06 05:57