3

我有以下课程:

public class MailData : IDisposable
{
  public IDictionary<String, Tuple<Byte[], String>> Attachments { get; set; }
  public String From { get; set; }
  public IList<String> To { get; set; }   
  public MailType Type { get; set; }
} // MailData

处置班级的正确方法是什么?

我的意思是,我认为我应该Byte[]Dictionary...中删除所有内容

其他属性呢?

4

4 回答 4

4

.NET 是一个托管环境,您必须允许垃圾收集器完成它的工作,您没有理由处置简单的引用类,byte[]它仍然是一个引用。

通常您使用该Dispose模式来释放有价值的资源,例如文件 I/O、各种流、数据库连接...等

但是,在您的情况下,您无需自己做任何事情。

欢迎来到 C# 的托管世界。

于 2013-03-23T13:53:38.233 回答
1

你不需要做任何事情,除非你的MailType类也是一次性的,在这种情况下你会想要处理它。您不需要清除任何集合,因为它们会在超出范围后的某个时间连同其内容一起被垃圾收集。

于 2013-03-23T13:54:09.740 回答
1

MailType除非有一些非托管资源,否则您无需执行任何操作。在这种情况下,您应该重写此类的 Dispose 并调用 MailType 对象的 Dispose。

此外,如果字典中的字节数很大,则应将实例包装在using语句中。

using(var m = new MailData())
{
   // use the object here

} // the m.Dispose() gets called here
于 2013-03-23T14:00:35.193 回答
0

首先,您应该考虑需要实现哪些方法。你可以在这里找到一篇有趣的文章 总结:你应该只在真正需要它们时才实现 dispose / finalize,否则只会减慢 GC 的速度。在这些方法中,您只需要释放非托管资源。要了解有关非托管资源的更多信息,请查看. 还要问自己:我是要通过调用 dispose 显式释放非托管资源,还是要让 GC 通过隐式调用 Finalize 来完成它。

希望有帮助,Xaser

于 2013-03-23T14:00:12.830 回答