我可以简单地写:
using (Graphics graph = Graphics.FromImage(Image1)) {
graph.DrawImage(Image2.Clone(Rectangle1, Image2.PixelFormat), 0, 0, Image1.Width, Image1.Height);
}
或者我应该写:
using (Graphics graph = Graphics.FromImage(Image1))
using (Bitmap Image3 = Image2.Clone(Rectangle1, Image2.PixelFormat)) {
graph.DrawImage(Image3, 0, 0, Image1.Width, Image1.Height);
}
答案 0 :(得分:3)
基本的经验法则是,如果创建它并且它是一次性的,则将其丢弃。
答案 1 :(得分:0)
如果有一个方法,它将创建一个可抛弃的对象并将其返回给使用类或方法。它将清理的责任转移到该消耗类或方法上。在您的情况下-这就是克隆方法。调用Dispose的职责已从您的示例移至类/方法。
如果一次性对象是类中的一个字段-那么在大多数情况下,您的类还应该实现IDisposable
并将该字段作为其dispose方法的一部分进行处理。
无论何时使用一次性对象,还是何时使用创建模式(例如工厂)创建一次性对象时,都应牢记这一点。
在某些情况下,可弃资源通过某种包装类进行处置。例如,StreamReader
在其自己的dispose方法中处理基础Stream
。
尽管如此,处置流还是有道理的,因为StreamReader的实现(无论多么不可能)将来可能会改变。