Dispose with Using
I’m sure that many of you already know that many of the objects in the .NET framework need to be disposed. The most common of these are the windows objects and the stream objects.
Of course the trick in using dispose is in calling it at the right time. If your code throws an exception, you need to make sure that dispose still gets called on that object.
The standard code for ensuring that dispose gets called looks like:
System.IO.FileStream fs = new System.IO.FileStream("c:\\file.txt", System.IO.FileMode.Open); try { // do something with fs here } finally { fs.Dispose(); }
Which can get pretty cumbersome if you are dealing with multiple objects that need to be disposed.
This is where the usings statement comes in handy. By using(fs) we avoid having to write out the finally block:
System.IO.FileStream fs = new System.IO.FileStream("c:\\file.txt", System.IO.FileMode.Open); using(fs) { // do something with fs here }
When the code compiles to intermediate language, it translates the using statement into the try/finally syntax I showed you above.
You can also embed the constructor line in your using statement:
using (System.IO.FileStream fs = new System.IO.FileStream("c:\\file.txt", System.IO.FileMode.Open)) { // do something here }
And you can combine multiple statements in your using block as long as the types match so that if you were doing a file copy operation your code might look something like this:
using (System.IO.FileStream fs = new System.IO.FileStream("c:\\file.txt", System.IO.FileMode.Open), fs2 = new System.IO.FileStream("c:\\file2.txt", System.IO.FileMode.CreateNew)) { // do something here }
Notice in the code above that we did not have to declare fs2 as a FileStream because it was declared as such when we declared fs.
If you have objects of multiple types being used, you will need to use multiple using statements. Fortunately, we don’t run into this situation frequently so the syntax cleans up our code nicely most of the time.
Other post in Advanced CSharp
- Two Interfaces. Same Method. Two meanings. - September 29th, 2008
- Making values nullable - October 9th, 2008
- CSharp's Property Shortcuts - October 23rd, 2008
- Readonly variables in CSharp? Really?! - October 29th, 2008
- Dispose with Using - November 10th, 2008
- Delegates in .NET - December 4th, 2008
- Using Sealed in CSharp - December 8th, 2008
- CSharp checked and unchecked - December 11th, 2008
- Advanced CSharp - unsafe mode - December 15th, 2008
- Volatile variables and CSharp threads - December 22nd, 2008
- What is the global keyword in CSharp? - December 29th, 2008
- CSharp fixed keyword - January 5th, 2009
- using - There's more there than you are using - February 2nd, 2009
- Stackalloc in CSharp - February 16th, 2009
- Removing Warnings from CSharp Compile Cycle - March 10th, 2009
- && vs & and | vs ||... What's the difference? - March 16th, 2009
- Advanced CSharp - yield - March 25th, 2009
- Just say “No!” to C# Regions? Really?! - April 16th, 2009
- C# “” better than string.Empty? - April 20th, 2009
- .Net String Pool – Not Just For The Compiler - April 22nd, 2009
- CSharp ?? Operator - May 18th, 2009
- Using VB.NET From CSharp - July 1st, 2009
- Dispose, Finalize and SuppressFinalize - July 9th, 2009
- What is .NET’s Object.GetHashCode() Used For? - August 5th, 2009
- ASP.NET Substitution Control - October 22nd, 2009
Other Related Items:
Kathy Smith: Build Muscle Shrink FatUsing cutting-edge sculpting techniques Kathy Smith takes fat burning to the next level. Working the legs buns arms shoulders and core all at once all... Read More >
Sweet Barbecue Sauce Smokin' Joe Jones 6-Pack of 18-oz. glass jars. Original Mild flavor is a gourmet stlye barbecue sauce made from a family secret recipe using wild honey. No brown sugar means this barbecue sauce won't burn on the grill.Mild Barbeque & Dippin' Sauce Original Gourmet Flavor from Smokin' Joe Jones Barbecue Company is a mild, slightly sweet flavor with hints of garlic, o... Read More >
Ink Refill Kit for Canon PIXMA MX860 Printers using CLI-221 PGI-220 CartridgesQuick Overview:
Colors: Cyan, Magenta, Yellow, Black, Pigment Black
Volume: 120ml Per Bottle, 600ml Total
Contents: 5x Ink Bottles wi... Read More >
If you're new here, you may want to subscribe to the mailing list to get notifications of new post and a virtual tour of past topics. Thanks for visiting!










Good info.
You can also stack using statements of different types.
A common example is:
string connString = config.ConnectionString;
using(SqlConnection conn = new SqlConnection(connString))
using(SqlCommand cmd = conn.CreateCommand())
{
//Do database stuff here.
}
Cheers.
Rob.
[...] Dispose with Using (Dave M. Bush) [...]