加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#中处置对象

发布时间:2020-12-16 00:23:23 所属栏目:百科 来源:网络整理
导读:我写了以下课程: public class CoupleFrames{ public CoupleFrames(ColorImageFrame cif,Bitmap df) { this.colorFrame = cif; this.desktopFrame = df; } public ColorImageFrame colorFrame; public Bitmap desktopFrame;} 现在我使用以下代码来处理变量.
我写了以下课程:

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,您基本上告诉所有客户他们应该处置他们拥有的任何实例.如果你不满意这种负担,你需要重新考虑一下设计.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读