Home
Search
using KeywordUnderstand the using keyword. Handle IDisposable types like StreamReader with using.
C#
This page was last reviewed on Dec 14, 2022.
Using. In C# the "using" keyword has 2 purposes: it includes a namespace, or manages the underlying resources of a type. Most C# files use the "using" keyword.
Some notes. The using statement is combined with a type that implements IDisposable. Things like StreamReader or StreamWriter implement IDisposable.
StreamReader
StreamWriter
Interface
Tip Using protects the system's resources by specifying the scope of the usage of the resource.
Using statement. This program defines a class called SystemResource. The class implements the IDisposable interface and the required Dispose method.
Note In the Main method, we wrap the SystemResource instance inside a using statement.
Detail First the SystemResource instance is allocated upon the managed heap. Next the "1" is written.
And The "0" is written because the Dispose method is invoked. And finally, the "2" is printed.
Info As demonstrated, the Dispose method is called immediately when control flow exits the using block.
using System; using System.Text; class Program { static void Main() { // Use using statement with class that implements Dispose. using (SystemResource resource = new SystemResource()) { Console.WriteLine(1); } Console.WriteLine(2); } } class SystemResource : IDisposable { public void Dispose() { // The implementation of this method not described here. // ... For now, just report the call. Console.WriteLine(0); } }
1 0 2
Nested statements. It is possible to nest multiple using statements one after another. You do not need to use any curly brackets in this case.
Tip In the second or further using statements, you can use the variables declared in previous using statements as well.
using System; class Program { static void Main() { using (SystemResource resource1 = new SystemResource()) using (SystemResource resource2 = new SystemResource()) { Console.WriteLine(1); } } } class SystemResource : IDisposable { public void Dispose() { Console.WriteLine(0); } }
Using directive. The "using" keyword in C# is also used to include a namespace during compilation. This is what "using System" lines do at the top of files.
namespace
Using System
using System; class Program { static void Main() { // Console is in the System namespace. Console.WriteLine("Hello"); } }
Hello
Global using. We can place the keyword "global" before a using directive to indicate that the entire project should include the using directive. This can reduce source file size.
Here The Program.cs file has a global using for the System namespace, so Test.cs can access Console without a using System directive.
Console
// Program.cs global using System; class Program { static void Main() { Test.Print(); } } // Test.cs static class Test { public static void Print() { Console.WriteLine("Hello"); } }
Hello
A discussion. It is most common to use "using" with types already defined in .NET. Some of these types include BinaryReader, BinaryWriter, DataTable.
BinaryReader
BinaryWriter
DataTable
Info Use a resource acquisition expression inside the using statement. You do not need to implement any interfaces.
Using alias. For the using namespace feature, we can specify an alias for a namespace. This can reduce redundant text in source files.
using Alias
A summary. A using block invokes the Dispose method found in the IDisposable interface implementation. Meanwhile a using statement includes a namespace during compilation.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Dec 14, 2022 (rewrite).
Home
Changes
© 2007-2023 Sam Allen.