O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

3.29. Assuring an Object’s Disposal

Problem

You require a way to always have the Dispose method of an object called when that object’s work is done or it goes out of scope.

Solution

Use the using statement:

using System;
using System.IO;

// ...

using(FileStream FS = new FileStream("Test.txt", FileMode.Create))
{
    FS.WriteByte((byte)1);
    FS.WriteByte((byte)2);
    FS.WriteByte((byte)3);

    using(StreamWriter SW = new StreamWriter(FS))
    {
        SW.WriteLine("some text.");
    }
}

Discussion

The using statement is very easy to use and saves you the hassle of writing extra code. If the solution had not used the using statement, it would look like this:

FileStream FS = new FileStream("Test.txt", FileMode.Create);
try
{
    FS.WriteByte((byte)1);
    FS.WriteByte((byte)2);
    FS.WriteByte((byte)3);

    StreamWriter SW = new StreamWriter(FS);
    try
    {
        SW.WriteLine("some text.");
    }
    finally
    {
        if (SW != null)
        {
            ((IDisposable)SW).Dispose( );
        }
    }
}
finally
{
    if (FS != null)
    {
        ((IDisposable)FS).Dispose( );
    }
}

There are several points about the using statement.

  • There is a using directive, such as

    using System.IO;

    which should be differentiated from the using statement. This is potentially confusing to developers first getting into this language.

  • The variable(s) defined in the using statement clause must all be of the same type, and they must have an initializer. However, you are allowed multiple using statements in front of a single code block, so this isn’t a significant restriction.

  • Any variables defined in the using clause are considered ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required