ویژگیهای جدید 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، زبان را کارآمدتر کرد. این بهبود به توسعهدهندگان کمک کرد تا کدهایی ایمنتر و سادهتر برای مدیریت منابع بنویسند.
And To Do So From Now Until The Death, Whatever the Cost
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام