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 asusing 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 multipleusing
statements in front of a single code block, so this isn’t a significant restriction.Any variables defined in the
using
clause are considered ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.