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

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

نسخه C# 5.0 که در آگوست 2012 به همراه Visual Studio 2012 منتشر شد، تمرکز عمده‌ای بر افزودن قابلیت‌های مرتبط با برنامه‌نویسی غیرهمزمان (Asynchronous Programming) داشت. این نسخه، با معرفی کلیدواژه‌های async و await، برنامه‌نویسی غیرهمزمان را به یکی از اجزای اصلی زبان تبدیل کرد. علاوه بر این، ویژگی‌هایی مانند Caller Info Attributes نیز اضافه شد که کار توسعه‌دهندگان را در زمینه دیباگ و لاگ‌گیری ساده‌تر کرد.

Asynchronous Members (اعضای غیرهمزمان)

ویژگی‌های async و await امکان نوشتن کدهای غیرهمزمان (Asynchronous) را به زبان سی‌شارپ اضافه کردند. این قابلیت باعث شد توسعه‌دهندگان بتوانند عملیات‌های طولانی‌مدت، مانند درخواست‌های وب یا خواندن و نوشتن فایل‌ها، را بدون مسدود کردن رشته اصلی (Main Thread) اجرا کنند. این ویژگی، خوانایی کد را به طور چشم‌گیری بهبود بخشید.

توضیح مفاهیم:

  • async: این کلمه‌کلیدی مشخص می‌کند که متد موردنظر یک متد غیرهمزمان است و می‌تواند شامل کلیدواژه await باشد.
  • await: این کلمه‌کلیدی نشان‌دهنده یک عملیات غیرهمزمان است که باید منتظر تکمیل آن باشیم، بدون اینکه رشته جاری مسدود شود.

مثال: برنامه‌نویسی غیرهمزمان با async و await

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("Starting download...");
        string data = await DownloadDataAsync("https://example.com");
        Console.WriteLine("Data downloaded: ");
        Console.WriteLine(data);
    }

    static async Task DownloadDataAsync(string url)
    {
        using (HttpClient client = new HttpClient())
        {
            return await client.GetStringAsync(url);
        }
    }
}

مزایا:

  • بهبود خوانایی کد: به‌جای استفاده از Callbacks یا Tasks پیچیده، می‌توان از syntax ساده‌تر استفاده کرد.
  • مدیریت بهتر منابع: برنامه‌ها با استفاده از async/await در برابر انسداد رشته‌ها مقاوم‌تر می‌شوند.
  • عملکرد بهتر در برنامه‌های مقیاس‌پذیر: به‌ویژه در برنامه‌های تحت وب و APIها.

نکات مهم:

  • متدهای async همیشه یک Task (یا Task<T>) برمی‌گردانند، مگر اینکه void باشند (که تنها برای Event Handlers مناسب است).
  • استفاده نادرست از این قابلیت می‌تواند منجر به Deadlock شود، به‌ویژه در برنامه‌های دسکتاپ.

Caller Info Attributes (ویژگی‌های اطلاعات فراخوان)

این ویژگی به توسعه‌دهندگان اجازه می‌دهد تا اطلاعات مربوط به فراخوانی یک متد، مانند نام فایل، شماره خط، یا نام متد فراخواننده را بدون استفاده از کدهای پیچیده Reflection دریافت کنند. این قابلیت به‌ویژه در زمینه‌های دیباگ و لاگ‌گیری بسیار مفید است.

ویژگی‌های Caller Info:

  • [CallerMemberName]: نام متدی که فراخوانی انجام داده است.
  • [CallerFilePath]: مسیر کامل فایل کدی که فراخوانی در آن رخ داده است.
  • [CallerLineNumber]: شماره خطی که متد از آن فراخوانی شده است.
using System;
using System.Runtime.CompilerServices;

class Program
{
    static void Main()
    {
        LogMessage("This is a test log.");
    }

    static void LogMessage(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string filePath = "",
        [CallerLineNumber] int lineNumber = 0)
    {
        Console.WriteLine($"Message: {message}");
        Console.WriteLine($"Called from: {memberName}");
        Console.WriteLine($"In file: {filePath}");
        Console.WriteLine($"At line: {lineNumber}");
    }
}

خروجی:

Message: This is a test log.
Called from: Main
In file: C:PathToProgram.cs
At line: 6

مزایا:

  • حذف نیاز به نوشتن کدهای پیچیده Reflection.
  • تسهیل دیباگ و لاگ‌گیری.
  • افزایش خوانایی و کاهش حجم کد.

تأثیر نسخه C# 5.0

اضافه شدن قابلیت async/await، برنامه‌نویسی غیرهمزمان را به بخشی جدایی‌ناپذیر از سی‌شارپ تبدیل کرد. این نسخه به توسعه‌دهندگان امکان داد تا برنامه‌هایی سریع‌تر و با کارایی بالاتر ایجاد کنند. همچنین، ویژگی Caller Info Attributes، فرآیند لاگ‌گیری و دیباگ را ساده‌تر کرد و توسعه‌دهندگان را از نوشتن کدهای اضافه بی‌نیاز کرد.

پست های مرتبط

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

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

آنچه در این پست میخوانید ویژگی‌های جدید در یک نگاه: Static Imports (وارد کردن استاتیک) Exception Filters (فیلترهای استثنا) Auto-Property…

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

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

آنچه در این پست میخوانید Dynamic Binding (اتصال دینامیک) Named and Optional Parameters (پارامترهای نام‌گذاری‌شده و اختیاری) Generic Covariance and…

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

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

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

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

نظرات

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

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