Ayende @ Rahien

Hi!
My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:

ayende@ayende.com

+972 52-548-6969

, @ Q c

Posts: 5,971 | Comments: 44,508

filter by tags archive

The Ultimate Disposable


I'm very partial to safe code, so I really like the using() statement in C#. The problem with this statement, however, is that I want to do different things at different times, which require different disposing semantics from the same class. Here is an example from Rhino Mocks:

using(mocks.Ordered())
{
   using(mocks.Unordered())
   {
   }
}

I'm using the using() statement to allow easy scoping of the behavior. I find the code far more readable this way. The problem is that I need to create a class that implements IDisposable, while the action that I want is a single line of code. For this purpose, I created the DisposableAction:

public class DisposableAction : IDisposable
{
  Action<T> _action;

  public DisposableAction(Action<T> action, T val)
  {
     if (action == null)
       throw new ArgumentNullException("action");
     _action = action;
  }
 
  public void Dispose()
  {
    _action();
  }
}

The usage of this class is simple:

public IDisposable AllowModification
{
  get
  {
      _allowModification = true;
      return new DisposableAction(delegate { _allowModification = false; } );
   }
}

And then you can call it like this:

UsuallyReadOnly foo = new UsuallyReadOnly();
using(foo.AllowModification)
{
  foo.Name = "Bar";
}

Simple, safe, and it doesn't require of me to write any more than neccecary.


Comments

Comment preview

Comments have been closed on this topic.

FUTURE POSTS

  1. Paying the rent online - one day from now

There are posts all the way to Aug 03, 2015

RECENT SERIES

  1. Production postmortem (5):
    29 Jul 2015 - The evil licensing code
  2. Career planning (6):
    24 Jul 2015 - The immortal choices aren't
  3. API Design (7):
    20 Jul 2015 - We’ll let the users sort it out
  4. What is new in RavenDB 3.5 (3):
    15 Jul 2015 - Exploring data in the dark
  5. The RavenDB Comic Strip (3):
    28 May 2015 - Part III – High availability & sleeping soundly
View all series

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats