C# 为什么需要处置System.Net.Mail.MailMessage实例?

C# 为什么需要处置System.Net.Mail.MailMessage实例?,c#,email,C#,Email,它分配哪些需要处置的非托管资源?它不只是一个简单的托管数据数组吗?那么为什么要处理呢?邮件有附件->附件是流->要处理的流 以下是MailMessage的反编译Dispose方法: protected virtual void Dispose(bool disposing) { if (disposing && !this.disposed) { this.disposed = true;

它分配哪些需要处置的非托管资源?它不只是一个简单的托管数据数组吗?那么为什么要处理呢?

邮件有附件->附件是流->要处理的流

以下是MailMessage的反编译Dispose方法:

    protected virtual void Dispose(bool disposing)
    {
        if (disposing && !this.disposed)
        {
            this.disposed = true;
            if (this.views != null)
            {
                this.views.Dispose();
            }
            if (this.attachments != null)
            {
                this.attachments.Dispose();
            }
            if (this.bodyView != null)
            {
                this.bodyView.Dispose();
            }
        }
    }

一般来说,如果类包含的子类实现了IDisposable,则类应该实现IDisposable。

邮件可以有附件,附件由MIME部分表示,MIME部分本身包含一个流。此流需要关闭,因为它可能包含指向基础数据的非托管指针。

因为它实现了IDisposable:)@csharptest.net这不是原因。@Ci3它是!如果某个东西实现了IDisposable,那么它的API将请求处理。如果你不处理,坏事可能会发生。异常可能存在,但它们是异常。@Raphael我理解如果对象实现该类,为什么要处理它们,但注释只是一个实现细节。它没有解释该类中未管理的数据是什么。@Ci3同意!但是,既然这只是一个评论,那么我想这没关系(如果它是一个答案,我不会接受。)那么这是否意味着如果邮件没有任何附件,就不需要处理它呢?@Raphael如果某个邮件实现了IDisposable,你应该处理它。你也可以看到,它还处理其他事情。每一条规则都有它自己的规则,但这不是例外。