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

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

تاریخ انتشار: نوامبر 2017

نسخه 7.2 زبان C# تغییرات قابل‌توجهی را با تمرکز بر بهبود عملکرد و مدیریت دقیق‌تر منابع معرفی کرد. این نسخه بر ارائه ابزارهای کارآمدتر برای توسعه‌دهندگان، بهبود پشتیبانی از ساختارها (Structs) و افزوده‌های کوچک اما پراستفاده تمرکز داشت.

مقداردهی اولیه برای آرایه‌های stackalloc

در این نسخه، می‌توانید هنگام تخصیص آرایه‌ها به کمک stackalloc، مقادیر اولیه را تعیین کنید. این ویژگی کدنویسی کارآمد و ایمن‌تر را در مدیریت آرایه‌های حافظه پشته فراهم می‌کند.

مثال:

Span numbers = stackalloc int[] { 1, 2, 3, 4, 5 };

این روش برای تخصیص حافظه‌های کوتاه‌مدت و سریع کاربرد دارد و نیازی به تخصیص در حافظه Heap ندارد.

استفاده از fixed با هر نوع دارای الگو

در نسخه 7.2، می‌توانید از عبارت fixed برای انواعی استفاده کنید که از الگوی خاصی پشتیبانی می‌کنند، نه فقط انواع خاص از پیش تعریف‌شده. این ویژگی برای توسعه‌دهندگان پیشرفته که با حافظه مدیریت نشده کار می‌کنند بسیار کاربردی است.

مثال:

unsafe
{
    fixed (char* p = "Hello")
    {
        Console.WriteLine(*p); // خروجی: H
    }
}

دسترسی به فیلدهای ثابت بدون پین کردن (Pinning)

در این نسخه، امکان دسترسی مستقیم به فیلدهای ثابت (Fixed Fields) بدون نیاز به عملیات پین کردن فراهم شده است، که باعث بهبود امنیت و عملکرد کد می‌شود.

متغیرهای محلی ref و قابل بازتخصیص (Reassignable ref Locals)

در C# 7.2، متغیرهای محلی ref را می‌توان بازتخصیص کرد، به این معنی که مرجع آن‌ها می‌تواند به آدرس دیگری اشاره کند.

مثال:

int a = 10, b = 20;
ref int r = ref a;
r = ref b;
r = 30;

Console.WriteLine(a); // خروجی: 10
Console.WriteLine(b); // خروجی: 30

ساختارهای readonly

ساختارهای readonly برای تعریف نوع‌های تغییرناپذیر (Immutable) طراحی شده‌اند. این ساختارها همواره به عنوان آرگومان با کلیدواژه in ارسال می‌شوند.

مثال:

readonly struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

این ویژگی برای بهینه‌سازی کد و جلوگیری از تغییرات ناخواسته بسیار مفید است.

اصلاح‌کننده in برای پارامترها

با استفاده از کلیدواژه in، می‌توانید یک آرگومان را به صورت مرجع ارسال کنید، اما مانع تغییر آن در متد شوید. این ویژگی مشابه ref است اما بدون اجازه تغییر.

مثال:

void Print(in int value)
{
    Console.WriteLine(value);
}

int number = 42;
Print(in number);

اصلاح‌کننده ref readonly برای بازگشت مقادیر

در C# 7.2، امکان بازگشت مقادیر به صورت ref readonly فراهم شده است، به این معنا که متد مقدار را به صورت مرجع برمی‌گرداند اما اجازه تغییر آن را نمی‌دهد.

مثال:

ref readonly int GetMax(in int a, in int b)
{
    return ref (a > b ? ref a : ref b);
}

ساختارهای ref

ساختارهای ref struct برای دسترسی مستقیم به حافظه مدیریت‌شده طراحی شده‌اند و همیشه باید در پشته (Stack) تخصیص داده شوند. این ویژگی از مشکلات مربوط به مدیریت نادرست حافظه جلوگیری می‌کند.

مثال:

ref struct Span
{
    private T[] _array;

    public Span(T[] array)
    {
        _array = array;
    }
}

محدودیت‌های جدید برای جنریک‌ها

در این نسخه، محدودیت‌های بیشتری برای نوع‌های جنریک معرفی شد که انعطاف بیشتری در طراحی کلاس‌ها و متدهای عمومی ارائه می‌دهد.

آرگومان‌های نام‌گذاری‌شده غیرانتهایی (Non-Trailing Named Arguments)

در نسخه‌های قبلی، آرگومان‌های نام‌گذاری‌شده باید بعد از آرگومان‌های موقعیتی قرار می‌گرفتند. اما در C# 7.2، این محدودیت حذف شده است.

مثال:

void PrintDetails(string name, int age)
{
    Console.WriteLine($"Name: {name}, Age: {age}");
}

PrintDetails(age: 30, "Ali");

اعداد با خط زیر در ابتدا (Leading Underscores in Numeric Literals)

از این پس، اعداد می‌توانند با خط زیر (_) شروع شوند که به خوانایی بیشتر اعداد بزرگ کمک می‌کند.

مثال:

int bigNumber = _1_000_000;

دسترسی private protected

اصلاح‌کننده private protected دسترسی را به اعضای کلاس محدود می‌کند و تنها به کلاس‌های مشتق‌شده در همان اسمبلی اجازه می‌دهد به آن دسترسی داشته باشند.

مثال:

class BaseClass
{
    private protected int Number;
}

class DerivedClass : BaseClass
{
    void Display()
    {
        Console.WriteLine(Number);
    }
}

عبارات شرطی ref (Conditional ref Expressions)

عبارات شرطی (?:) اکنون می‌توانند مقادیری را به صورت مرجع برگردانند.

مثال:

ref int GetMax(ref int a, ref int b)
{
    return ref (a > b ? ref a : ref b);
}

نتیجه‌گیری

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

پست های مرتبط

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

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

آنچه در این پست میخوانید ویژگی‌های جدید C# 12 سازنده‌های اولیه (Primary Constructors) بیان‌های مجموعه (Collection Expressions) پارامترهای ref readonly…

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

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

آنچه در این پست میخوانید رشته‌های خام (Raw String Literals) پشتیبانی از ریاضیات عمومی (Generic Math Support) ویژگی‌های جدید در…

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

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

آنچه در این پست میخوانید Record Structs Improvements of Struct Types Interpolated String Handler Global Using Directives File-scoped Namespace Declaration…

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

نظرات

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

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