C# Using Tutorial – Complete Guide

Welcome to a comprehensive journey through the landscape of “C# using Statements”. This tutorial has been designed with a clear objective – to strengthen your foundation in game development and beyond. Not only does it take a deep dive into one of the most important coding statements, but it also attempts to do so in an engaging, beneficial, and feasible manner.

What is ‘C# using’?

The ‘using’ statement in C# is a convenience statement allowing you to specify a scope within your code. This scope defines the lifespan of an object. The object in question is released when it is no longer needed, thus freeing up memory, an ever-important aspect of programming, especially in game development!

What is it for?

The ‘using’ statement is used to handle objects implementing the IDisposable interface. The IDisposable interface provides a method called Dispose() which is used to free unmanaged resources like files, database connections, network resources and more. If an object is declared inside a using statement, the Dispose() method is called at the end of the ‘using’ statement’s scope helping you manage resources efficiently and keep your game performance top-notch.

Why should I learn it?

You might wonder why is it necessary to learn to utilize the ‘C# using’ statement? The answer is rather simple:

  • Makes your code cleaner: The using statement does away with the hustle of writing long try-catch-finally code blocks. Hence, making your code cleaner and easier to read.
  • Memory Management: As it automatically calls the Dispose method, it helps to improve the memory management of your application.
  • Less prone to error: ‘C# using’ statement reduces the likelihood of forgetting to call Dispose(), thus it’s less error-prone.

The C# using statement has become a fundamental staple in C# programming and a must-know for burgeoning game developers, providing an efficient way to work with resources.

CTA Small Image
FREE COURSES AT ZENVA
LEARN GAME DEVELOPMENT, PYTHON AND MORE
ACCESS FOR FREE
AVAILABLE FOR A LIMITED TIME ONLY

Using C# using Statement: Basic Scenarios

Let’s plunge into some basic examples to understand the C# using statement a bit better. Remember, practice makes perfect!

Example 1: using with FileStream

The first example uses the ‘using’ statement with FileStream to read from a file. This is a convenient way to ensure the FileStream gets disposed properly after you’re done with it.

using (FileStream fs = new FileStream("TestFile.txt", FileMode.Open))
{
    byte[] b = new byte[1024];
    UTF8Encoding temp = new UTF8Encoding(true);

    while (fs.Read(b,0,b.Length) > 0)
    {
        Console.WriteLine(temp.GetString(b));
    }
}

This creates a FileStream object for the “TestFile.txt”. It reads the content of the file within the ‘using’ block, after which the Dispose() method is automatically invoked and the resources are released.

Example 2: Using with SqlConnection

Next, let’s consider using the ‘using’ statement with a SqlConnection. This will make sure that once we’re done with our connection, it’s released and not left hanging open which can lead to potential issues.

using (SqlConnection con = new SqlConnection(connectionString))
{
    con.Open();
    //perform database operations
}

Here, as soon the ‘using’ block is exited, the Dispose method will automatically be called for the SqlConnection object, i.e., the database connection is closed efficiently.

Example 3: Multiple using Statements

It’s also possible to have multiple ‘using’ declarations in sequence, providing robust control workflows. In this next example, we’re going to show how to use multiple ‘using’ statements with SQL classes.

using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(queryString, con))
{
    con.Open();
    //perform database operations with cmd
}

Here, we declare two SQL classes: SqlConnection and SqlCommand. Dispose() will be automatically called for both objects as soon as the operations are done, thus ensuring resources are properly managed.

Example 4: Nested using Statements

And finally, ‘using’ statements can be nested within one another, allowing for fine-grained resource management control.

using (StreamReader sr = new StreamReader("TestFile.txt"))
{
    string line;
    using (StreamWriter sw = new StreamWriter("WriteLines2.txt"))
    {
        while ((line = sr.ReadLine()) != null)
        {
            sw.WriteLine(line);
        }
    }
}

In this nested example, we have a StreamReader to read from “TestFile.txt” and a StreamWriter to write to “WriteLines2.txt”. Once each operation is done, Dispose() is called on the respective objects, freeing up those resources efficiently.

These examples have illustrated how we can leverage ‘using’ statements in C# to manage resource handling in different situations efficaciously.

Going Deeper with ‘C# using’ Statement

Having discussed the basics, let’s continue to explore more nuanced and complex examples where ‘using’ statements prove highly beneficial.

1. Working with Graphics

The ‘using’ statement can be used effectively with graphical objects like Bitmap from the System.Drawing namespace.

using (Bitmap bitmap = new Bitmap("TestImage.jpg")) 
{
    bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone);
    bitmap.Save("RotatedImage.jpg", ImageFormat.Jpeg);
}

This example creates a Bitmap object for the “TestImage.jpg” file, carries out the rotate operation on it, and then saves it to a new JPEG file. It ensures that the Bitmap object’s resources are disposed automatically once the process is completed.

2. Making Database Transactions

In the context of database operations, the ‘using’ statements can be used not only for handling connections but also for transactions. Take, for example, the creation of a Database Transaction.

using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();
    using (SqlTransaction sqlTran = cn.BeginTransaction())
    {
        using (SqlCommand cmd = new SqlCommand("InsertSomething", cn))
        {
            cmd.Transaction = sqlTran;
            cmd.CommandType = CommandType.StoredProcedure;
            // Add parameters, perform command
            sqlTran.Commit();
        }
    }
}

Here, a database connection is opened, a transaction is initiated, a command to perform an operation (e.g., insertion) is set up, and finally, after successful operation, the transaction is committed. Dispose() is called on the SqlCommand, SqlTransaction, and SqlConnection objects accordingly to manage resources.

3. Creating Device Contexts in Forms

Consider another example where ‘using’ statements are commonly used – working with device context objects in Windows Forms applications.

protected override void OnPaint(PaintEventArgs e)
{
    using (Graphics g = e.Graphics)
    {
        g.FillRectangle(Brushes.AliceBlue, this.ClientRectangle);
    }
}

In this example, ‘using’ is utilized to encapsulate the Graphics object, drawn from a PaintEventArg’s object. A rectangle gets filled with ‘AliceBlue’ color to the form’s entire client area. Once done, the Graphics object’s Dispose() method gets called automatically.

4. Working with ZipFiles

Another scenario where ‘using’ shines is when working with compressed files (like .zip). In this example, we’ll consider the ZipFile class from the System.IO.Compression namespace.

using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
        {
            entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
        }
    }
}

This bit of code opens a zip file for reading and, traversing over the file entries, extracts all the .txt files to an extraction path. After extraction, the resources of the ZipArchive object are released automatically.

We explored several examples that illustrate how ‘using’ statements can be wielded in a variety of scenarios to manage resources and keep the code clean, from transactions in database operations, graphical processes, device contexts for Windows Form applications, to handling compressed files, the ‘using’ statement in C# proves itself an indispensable tool.

As you familiarize yourself with ‘using’, you’ll undoubtedly come to understand its versatility, convenience, and unquestionable value in your coding toolset!

Advanced Usage of C# ‘using’ Statement

As we deepen our understanding of the ‘using’ statement, you’ll see its immense value unfold. Below, you’ll find even more examples showcasing its applicability in various contexts.

1. Using with Crawing and Indexing Websites

It can be used effectively with the HttpClient class, common in applications for crawling or indexing websites.

using (HttpClient client = new HttpClient())
{
    var content = await client.GetStringAsync("http://example.com");
    Console.WriteLine(content);
}

In this scenario, an HttpClient object fetches content from a specified URL. Once done, the ‘using’ block ensures the Dispose() method is called, releasing the resources.

2. Sockets and Network Connections

The Socket class from the System.Net.Sockets namespace is one we can leverage ‘using’ with to manage network connections.

using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
    s.Connect(IPAddress.Parse("127.0.0.1"), 80);
    //send and receive data
}

This code snippet creates a Socket object that connects to a local host on port 80. After the necessary data transmission, ‘using’ makes sure the network connection resources are disposed.

3. Working with XML

The ‘using’ statement can be used with XmlWriter from the System.Xml namespace, which is common in writing XML files.

using (XmlWriter writer = XmlWriter.Create("TestFile.xml"))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("book");
    writer.WriteElementString("title", "The C# Programming Yellow Book");
    writer.WriteEndElement();
    writer.WriteEndDocument();
}

This piece of code creates an XmlWriter object, and using it creates an XML file named “TestFile.xml”. The XML file is appropriately structured according to the necessary elements, and once done, the ‘using’ statement ensures the XmlWriter is correctly disposed.

4. Reading and Writing Binary Data

‘Using’ is also efficient when operating with BinaryReader or BinaryWriter for reading or writing binary data.

using (BinaryWriter writer = new BinaryWriter(File.Open("TestBin.dat", FileMode.Create)))
{
    writer.Write(123);
    writer.Write(456);
    writer.Write("This is a test");
    writer.Write(true);
    writer.Write(1.23);
}

This code writes various types of data into a binary file “TestBin.dat” using BinaryWriter. After writing, dispose of the BinaryWriter object by ‘using’ to free the related resources.

These examples have touched upon how ‘using’ can be beneficial with HttpClient classes for fetching web content, managing network connections with Socket, writing XML files using XmlWriter, and handling binary data with BinaryWriter.

The ‘using’ statement in C# is definitely a boon when it comes to writing clean, efficient, and manageable code, consistently proving its worth by ensuring that resources are correctly disposed, keeping your applications lean and optimized. No matter the type or scope of your project, whether it be game development or beyond, this tool will always be of immense aid!

Keep Expanding Your Knowledge

Congratulations on taking this major step in your coding journey! The ‘using’ statement is just one piece of the C# puzzle. There’s still plenty to learn and explore in the world of coding, game development, and beyond.

Are you eager about the next step? We encourage you to take a look at our extensive Unity Game Development Mini-Degree. This collection of courses provides a comprehensive understanding of game development using Unity, a popular engine used not only in gaming but also in industries such as architecture, film, animation, automotive, education, and healthcare. Regardless of your skill level, this mini-degree offers flexible learning to create your own 2D and 3D games while building a portfolio of Unity projects.

For those who want a wider selection, feel free to browse through our entire Unity collection. At Zenva, we believe in empowering you to hone your skills, unlock your potential, and shape your future. With over 250 supported courses, we have something for everyone – from beginners to seniors. Our range of online courses enables you to learn coding, create games, and earn certifications at your own pace. Let’s continue learning with us!

Conclusion

By taking this deep dive into the ‘using’ statement in C#, you’ve now added a powerful tool to your programming toolbox. Applying this knowledge in your software or game development pursuits will undoubtedly lead towards cleaner, more efficient, and more maintainable code. Take this new knowledge as a sign of progress and encouragement to continue learning.

Immerse yourself in the fascinating world of game development by joining hands with us at Zenva. Jump right into our carefully crafted Unity Game Development Mini-Degree program to pave your way towards becoming a versatile game developer. Happy learning!

Did you come across any errors in this tutorial? Please let us know by completing this form and we’ll look into it!

FREE COURSES
Python Blog Image

FINAL DAYS: Unlock coding courses in Unity, Godot, Unreal, Python and more.