我写了以下课程:
public class CoupleFrames
{
public CoupleFrames(ColorImageFrame cif, Bitmap df)
{
this.colorFrame = cif;
this.desktopFrame = df;
}
public ColorImageFrame colorFrame;
public Bitmap desktopFrame;
}
Run Code Online (Sandbox Code Playgroud)
现在我使用以下代码来处理变量.
CoupleFrames cf = new CoupleFrames(frame1, frame2);
// some code...
cf.colorFrame.Dispose();
cf.desktopFrame.Dispose();
Run Code Online (Sandbox Code Playgroud)
我不确定这是正确的方法.有人可以建议我处理整个物体的正确方法吗?
Jon*_*eet 14
我不确定这是正确的方法.有人可以建议我处理整个物体的正确方法吗?
当然 - 你应该制作CoupleFrames工具IDisposable,它的 Dispose方法应该处理它"拥有"的对象.例如:
public sealed class CoupleFrames : IDisposable
{
private readonly ColorImageFrame colorFrame;
private readonly Bitmap desktopFrame;
public CoupleFrames(ColorImageFrame cif, Bitmap df)
{
// TODO: Argument validation, unless it's valid for these parameters
// to be null, in which case the Dispose method would need to be careful.
this.colorFrame = cif;
this.desktopFrame = df;
}
public void Dispose()
{
colorFrame.Dispose();
desktopFrame.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的几点:
CoupleFrame真正"拥有"这些组成对象.处置依赖于明确的所有权模式CoupleFrame 没有密封(并且不能),您可能需要使用虚拟方法和终结器进入更复杂的模式.它会变得非常复杂,你应该阅读Joe Duffy等人给出的建议.如果你的课程是密封的,那么很多复杂性就会消失CoupleFrame工具IDisposable,您基本上告诉所有客户他们应该处置他们拥有的任何实例.如果你不满意这种负担,你需要重新考虑一下设计.