在C#中处置对象

在C#中处置对象,第1张

概述我写了以下课程: public class CoupleFrames{ public CoupleFrames(ColorImageFrame cif, Bitmap df) { this.colorFrame = cif; this.desktopFrame = df; } public ColorImageFrame colo 我写了以下课程:

public class CoupleFrames{    public CoupleFrames(colorImageFrame cif,Bitmap df)    {        this.colorFrame = cif;        this.desktopFrame = df;    }    public colorImageFrame colorFrame;    public Bitmap desktopFrame;}

现在我使用以下代码来处理变量.

CoupleFrames cf = new CoupleFrames(frame1,frame2);// some code...cf.colorFrame.dispose();cf.desktopFrame.dispose();

我不确定这是正确的方法.有人可以建议我处理整个物体的正确方法吗?

解决方法

I’m not sure that this is the correct way. Someone can suggest me the correct way for disposing the entire object?

当然 – 你应该让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();    }}

需要注意的几点:

>你应该确保CoupleFrame确实“拥有”这些组成对象.处置依赖于明确的所有权模式
>如果CoupleFrame没有密封(并且不能),您可能需要使用虚拟方法和终结器进入更复杂的模式.它可能变得非常复杂,你应该阅读advice given here by Joe Duffy et al.如果你的课程是密封的,那么很多复杂性就会消失>公共字段通常是一个坏主意(在封装方面),这就是为什么我在这里将它们设为私有.我也把它们做成只读,好像它们可以在以后更改时你需要考虑是否应该更改它们应该处理先前引用的对象等.>通过使CoupleFrame实现Idisposable,您基本上告诉所有客户他们应该处置他们拥有的任何实例.如果你不满意这种负担,你需要重新考虑一下设计.

总结

以上是内存溢出为你收集整理的在C#中处置对象全部内容,希望文章能够帮你解决在C#中处置对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存