Skip to main content
 首页 » 编程设计

c#之集合类和 IDisposable 接口(interface)

2024年01月26日25thcjp

我最近一直在阅读有关 IDisposable 接口(interface)的内容(该主题非常有用 Proper use of the IDisposable interface )以及 using 语句的用法(主题 Uses of "using" in C# )。然后我开始思考是否应该以某种方式从内存中释放我自己的集合类。

class User{ 
    private string username {set;get;} 
    private string password {set;get;} 
    ... 
} 

它应该实现 IDisposable 接口(interface)吗?

class User : IDisposable 
{ 
    ... 
    public void Dispose() 
    { 
        this.Dispose(); 
    } 
} 

所以它可以从内存中释放出来?还是 GC 会自动执行,我什至不应该为此烦恼。

据我所知,释放数据库连接等非托管资源很重要,但那些集合类呢?因为我经常使用它们,所以它真的开始困扰我。

tl;dr; 我应该在 User 类上实现 IDisposable 吗?

亲切的问候。


编辑:感谢大家的回复!

请您参考如下方法:

Or does GC do it automaticly and I shouldn't even bother about it.

这个。除非您拥有非托管资源(直接或通过引用其他一次性资源),否则您几乎肯定不应该实现 IDisposable。

您当前的实现只会调用自身:

public void Dispose() 
{ 
    this.Dispose(); 
} 

...所以假设您真的不想调用 this.Dispose(),当 Dispose()< 时您会做什么 被称为?这不像处置会导致垃圾收集 - 那么您想采取什么行动?如果答案是“无”,那么您可能不应该实现 IDisposable。 (这里的异常(exception)情况是,如果它被设计为基类并且您期望一些派生类需要处理......这是一个更复杂的场景。)