دستور using

کاربرد اصلی دستور using نابود کردن اشیاء و آزاد کردن فضای حافظه است. همانطور که می دانید بعد از ساخت اشیاء و عدم استفاده از آن باید آن را از حافظه خارج کنیم تا دوباره آن بخش از حافظه مورد استفاده قرار گیرد. اگر چه garbage collector یا زباله روب حافظه این کار را به طور اتوماتیک انجام می‌دهد، ولی مشخص نیست garbage collector چه زمانی رخ می‌دهد و تا زمانی که garbage collector کار خود را شروع نکند، همچنان حافظه بلا استفاده می‌ماند. در سی شارپ، شما می‌توانید هر لحظه که لازم باشد، شیء بلا استفاده را از حافظه پاک کنید (اصطلاحاٌ Dispose کنید). ساختار کلی دستور using به صورت زیر است :

using()
{
    ...
}

این دستور، به دستور try…finally ترجمه می‌شود. پس دو کد زیر با هم برابرند :

using (Person person = new Person())
{
     // Code to execute
}                                                       
Person person = new Person();
try
{
    // Code to execute
}
finally
{
    if (person != null)
    {
        person.Dispose();
    }                
}

اگر بخواهیم از کلاسمان (Person) در داخل دستور using استفاده کنیم، باید ابتدا رابط IDisposable را توسط کلاسمان پیاده سازی کنیم. این رابط دارای متد ()Dispose می‌باشد که بعد از دستور using فراخوانی شده و حافظه را از اشیاء بلا استفاده پاک می‌کند. به تکه کد زیر توجه کنید :

using System;

namespace UsingStatement
{
    class Person : IDisposable
    {
        public void Dispose()
        {
            Console.WriteLine("The Dispose method executed!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            using (Person person = new Person())
            {
                Console.WriteLine("Using Statement executed!");
            }
        }
    }
}
Using Statement executed!
The Dispose method executed!

همانطور که در خروجی مشاهده می‌کنید، ابتدا دستور داخل بلاک using و سپس دستور داخل متد ()Dispose اجرا می‌شود.