ویژگی‌های جدید C# 1.2

ویژگی‌های جدید C# 1.2

نسخه 1.2 از زبان C# در آوریل 2003 و همراه با Visual Studio .NET 2003 منتشر شد. این نسخه در مقایسه با نسخه اولیه، تغییرات زیادی نداشت، اما یک بهبود مهم در استفاده از حلقه‌های foreach اضافه شد که نقش قابل توجهی در بهینه‌سازی مدیریت منابع ایفا کرد.

در این مقاله، تغییرات کلیدی نسخه 1.2 را بررسی کرده و با مثال‌های عملی، آن‌ها را توضیح می‌دهیم.

حلقه foreach و Dispose

مهم‌ترین بهبود در C# 1.2، اضافه شدن پشتیبانی از Dispose در حلقه‌های foreach بود. از این نسخه به بعد، اگر IEnumerator استفاده‌شده در حلقه foreach، رابط IDisposable را پیاده‌سازی کرده باشد، متد Dispose آن به‌صورت خودکار پس از اتمام حلقه فراخوانی می‌شود. این ویژگی به مدیریت خودکار منابع (مانند آزاد کردن حافظه یا بسته شدن فایل‌ها) کمک می‌کند.

چرا Dispose مهم است؟

Dispose بخشی از الگوی IDisposable است که برای مدیریت منابع غیربازگشتی (مانند فایل‌ها، اتصالات دیتابیس یا دسته‌های سیستم‌عامل) طراحی شده است. اگر منابع آزاد نشوند، ممکن است نشت حافظه یا مشکلات عملکردی رخ دهد.

مثال: پیاده‌سازی IDisposable در کلاس

در این مثال، کلاس Resource از IDisposable استفاده کرده و مدیریت منابع را در متد Dispose انجام می‌دهد.

using System;
using System.Collections;

public class Resource : IDisposable
{
    private string resourceName;

    public Resource(string name)
    {
        resourceName = name;
        Console.WriteLine($"{resourceName} acquired.");
    }

    public void Dispose()
    {
        Console.WriteLine($"{resourceName} released.");
    }
}

class Program
{
    static void Main()
    {
        var resources = new List
        {
            new Resource("Resource 1"),
            new Resource("Resource 2"),
            new Resource("Resource 3")
        };

        // استفاده از حلقه foreach
        foreach (var resource in resources)
        {
            // دسترسی به منابع
            Console.WriteLine($"Using {resource}");
        }

        // Dispose به‌طور خودکار برای هر Resource فراخوانی می‌شود.
    }
}

آنالیز عملکرد foreach در C# 1.2

کد زیر یک حلقه foreach ساده را نشان می‌دهد که روی یک مجموعه تکرار می‌کند. اگر Enumerator رابط IDisposable را پیاده‌سازی کرده باشد، متد Dispose به‌طور خودکار بعد از اتمام حلقه فراخوانی می‌شود.

using System;
using System.Collections;

public class CustomCollection : IEnumerable
{
    public IEnumerator GetEnumerator()
    {
        return new CustomEnumerator();
    }
}

public class CustomEnumerator : IEnumerator, IDisposable
{
    private int position = -1;

    public bool MoveNext()
    {
        position++;
        return position < 3; // سه عنصر فرضی
    }

    public object Current => position;

    public void Reset()
    {
        position = -1;
    }

    public void Dispose()
    {
        Console.WriteLine("Enumerator disposed.");
    }
}

class Program
{
    static void Main()
    {
        var collection = new CustomCollection();

        foreach (var item in collection)
        {
            Console.WriteLine($"Item: {item}");
        }

        // Dispose به‌طور خودکار فراخوانی می‌شود.
    }
}

قبل و بعد از نسخه 1.2

  • پیش از C# 1.2: متد Dispose به‌صورت خودکار در حلقه foreach فراخوانی نمی‌شد. برنامه‌نویس باید به‌صورت دستی منابع را مدیریت می‌کرد.
  • در C# 1.2 و بعد از آن: متد Dispose به‌طور خودکار برای Enumerator فراخوانی می‌شود، به شرطی که Enumerator از IDisposable پیروی کند.

بهینه‌سازی مدیریت منابع

این ویژگی باعث شد توسعه‌دهندگان نیازی به مدیریت دستی منابع نداشته باشند و احتمال بروز خطاهای ناشی از فراموشی آزادسازی منابع کاهش یابد. این تغییر ساده اما مهم، مسیر توسعه کدهای پایدارتر و بهینه‌تر را هموار کرد.

جمع‌بندی

نسخه C# 1.2 تغییرات بزرگی به زبان اضافه نکرد، اما افزودن قابلیت مدیریت خودکار Dispose در حلقه foreach، زبان را کارآمدتر کرد. این بهبود به توسعه‌دهندگان کمک کرد تا کدهایی ایمن‌تر و ساده‌تر برای مدیریت منابع بنویسند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
ویژگی‌های جدید C# 3.0

ویژگی‌های جدید C# 3.0

آنچه در این پست میخوانید Language-Integrated Query (LINQ) (پرس‌وجوی یکپارچه با زبان) Lambda Expressions (عبارات لامبدا) Auto-Implemented Properties (خصوصیات خودکار…

بیشتر بخوانید
ویژگی‌های جدید C# 2.0

ویژگی‌های جدید C# 2.0

آنچه در این پست میخوانید ۱. Generics (کلیات) ۲. Partial Types (کلاس‌های جزئی) ۳. Anonymous Methods (متدهای بی‌نام) ۴. Nullable…

بیشتر بخوانید
ویژگی‌های جدید C# 1.0

ویژگی‌های جدید C# 1.0

آنچه در این پست میخوانید C# 1.0: اولین گام‌ها ویژگی‌های اصلی C# 1.0 1. کلاس‌ها (Classes) 2. ساختارها (Structs) 3….

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.