Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
54 lines (34 sloc) 3.81 KB
title ms.custom ms.date helpviewer_keywords ms.assetid
using statement - C# Reference
seodec18
07/20/2015
using statement [C#]
afc355e6-f0b9-4240-94dd-0d93f17d9fc3

using statement (C# Reference)

Provides a convenient syntax that ensures the correct use of xref:System.IDisposable objects.

Example

The following example shows how to use the using statement.

[!code-csharpcsrefKeywordsNamespace#4]

Remarks

xref:System.IO.File and xref:System.Drawing.Font are examples of managed types that access unmanaged resources (in this case file handles and device contexts). There are many other kinds of unmanaged resources and class library types that encapsulate them. All such types must implement the xref:System.IDisposable interface.

When the lifetime of an IDisposable object is limited to a single method, you should declare and instantiate it in the using statement. The using statement calls the xref:System.IDisposable.Dispose%2A method on the object in the correct way, and (when you use it as shown earlier) it also causes the object itself to go out of scope as soon as xref:System.IDisposable.Dispose%2A is called. Within the using block, the object is read-only and cannot be modified or reassigned.

The using statement ensures that xref:System.IDisposable.Dispose%2A is called even if an exception occurs within the using block. You can achieve the same result by putting the object inside a try block and then calling xref:System.IDisposable.Dispose%2A in a finally block; in fact, this is how the using statement is translated by the compiler. The code example earlier expands to the following code at compile time (note the extra curly braces to create the limited scope for the object):

[!code-csharpcsrefKeywordsNamespace#5]

For more information about the try-finally statement, see the try-finally topic.

Multiple instances of a type can be declared in the using statement, as shown in the following example:

[!code-csharpcsrefKeywordsNamespace#6]

You can instantiate the resource object and then pass the variable to the using statement, but this is not a best practice. In this case, after control leaves the using block, the object remains in scope but probably has no access to its unmanaged resources. In other words, it's not fully initialized anymore. If you try to use the object outside the using block, you risk causing an exception to be thrown. For this reason, it's generally better to instantiate the object in the using statement and limit its scope to the using block.

[!code-csharpcsrefKeywordsNamespace#7]

For more information about disposing of IDisposable objects, see Using objects that implement IDisposable.

C# language specification

For more information, see The using statement in the C# Language Specification. The language specification is the definitive source for C# syntax and usage.

See also

You can’t perform that action at this time.