创建为参数的位图是否需要配置?

时间:2018-07-15 14:43:46

标签: c#

我可以简单地写:

 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);
 }

2 个答案:

答案 0 :(得分:3)

基本的经验法则是,如果创建它并且它是一次性的,则将其丢弃。

答案 1 :(得分:0)

如果有一个方法,它将创建一个可抛弃的对象并将其返回给使用类或方法。它将清理的责任转移到该消耗类或方法上。在您的情况下-这就是克隆方法。调用Dispose的职责已从您的示例移至类/方法。

如果一次性对象是类中的一个字段-那么在大多数情况下,您的类还应该实现IDisposable并将该字段作为其dispose方法的一部分进行处理。

无论何时使用一次性对象,还是何时使用创建模式(例如工厂)创建一次性对象时,都应牢记这一点。

在某些情况下,可弃资源通过某种包装类进行处置。例如,StreamReader在其自己的dispose方法中处理基础Stream。 尽管如此,处置流还是有道理的,因为StreamReader的实现(无论多么不可能)将来可能会改变。