Reputation: 1857
What unmanaged resources does it allocates that needs to be disposed? Isn't it just a simple array of managed data? So why disposing?
Upvotes: 41
Views: 11201
Reputation: 1039060
A MailMessage can have attachments, an attachment is represented by MIME part which itself holds a Stream. This Stream needs closing as it might hold an unmanaged pointer to the underlying data.
Upvotes: 14
Reputation: 35136
A mail message has attachments -> attachments are Streams -> Streams are to be disposed.
Here is the decompiled Dispose method of MailMessage:
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();
}
}
}
As a general rule a class should implement IDisposable if any of its contained children implement it.
Upvotes: 59