Jump to content
Xtreme .Net Talk

Recommended Posts

Posted (edited)

I have recreated System.Net.Mail.Message, because Microsoft did not see a reason to implement the Serializable feature. It looks like everything in Microsoft's Mail.Message class can be duplicated by organizing and naming strings appropriately.

 

I want to implement IDispose in my class so that it cleans itself up nicely, and (with the way I designed my class) all I need to dispose of are strings!

 

My email attachments are loaded from the local PC using a Stream Reader, then loaded into a string buffer (which gives me a 2 GB capacity - I'm hoping this is going to work, but it is still being developed).

 

My custom Message object handles attachments by creating a List of MyAttachments like so:

List<MyAttachment> Attachments

 

When I dispose of the resources used by my mail message model, how should I handle the strings?

 

Take the attachments, for example - Should I:

  • Set each String to an Empty String (i.e. attachment = string.Empty)?
  • Set the String to NULL (i.e attachment = null)?
  • Clear the List [i.e. Attachments.Clear()]?
  • A combination of above?
  • Or, are strings managed (i.e. I don't need to do anything)?

 

I would show the code, but I had to create a Mail Address class and an Attachment class to enable my Mail Message class to look like Microsoft's version (makes it easy to learn), so there are several lines of code and I've commented it well. Perhaps one day, I'll post it on CodeProject...

 

For now, here's my snippet of disposing related code:

#region IDisposable Members

~JpMessage() {
 Dispose(false);
}

public void Dispose() {
 Dispose(true);
 GC.SuppressFinalize(this);
}
// If disposing equals false, the method has been called by the 
// runtime from inside the finalizer and you should not reference 
// other objects. Only unmanaged resources can be disposed.
protected virtual void Dispose(bool disposing) {
 if (this._disposed == false) {
   if (disposing == true) {
     if (!_from.IsDisposed) _from.Dispose();
     if (!_replyTo.IsDisposed) _replyTo.Dispose();
     if (!_sender.IsDisposed) _sender.Dispose();
     foreach (JpMailAddress obj in _bcc) {
       if (!obj.IsDisposed) obj.Dispose();
     }
     foreach (JpMailAddress obj in _cc) {
       if (!obj.IsDisposed) obj.Dispose();
     }
     foreach (JpMailAddress obj in _to) {
       if (!obj.IsDisposed) obj.Dispose();
     }
     foreach (JpAttachment obj in _attachments) {
       if (!obj.IsDisposed) obj.Dispose();
     }
   }
 }
 _disposed = true;
}

#endregion

Edited by joe_pool_is

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...