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

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

تاریخ انتشار: مارس 2017
نسخه 7.0 زبان برنامه‌نویسی C# همزمان با انتشار Visual Studio 2017 عرضه شد و مجموعه‌ای از قابلیت‌های جذاب و انقلابی را به همراه آورد. این ویژگی‌ها به توسعه‌دهندگان اجازه می‌دهد تا کدهایی ساده‌تر، تمیزتر و مؤثرتر بنویسند. در این مقاله به طور کامل با ویژگی‌های جدید این نسخه آشنا می‌شویم.

متغیرهای Out (Out Variables)

در نسخه‌های قبلی C#، برای استفاده از متغیرهایی که به صورت out در متدها استفاده می‌شوند، نیاز بود ابتدا آن‌ها را تعریف کنید. اما در C# 7.0 می‌توانید این متغیرها را به صورت مستقیم در زمان فراخوانی متد تعریف کنید.

قبل از C# 7.0:

int result;
if (int.TryParse("123", out result))
{
    Console.WriteLine(result);
}

در C# 7.0:

if (int.TryParse("123", out int result))
{
    Console.WriteLine(result);
}

این قابلیت کدنویسی را تمیزتر و مختصرتر می‌کند و نیاز به تعریف متغیرهای اضافی را از بین می‌برد.

تاپل‌ها و تجزیه (Tuples and Deconstruction)

تاپل‌ها در نسخه 7.0 بسیار قوی‌تر شده‌اند و اکنون می‌توانید مقادیر متعدد را به صورت مستقیم از یک متد بازگردانید. همچنین، ویژگی تجزیه (Deconstruction) به شما این امکان را می‌دهد تا مقادیر تاپل را به صورت جداگانه دریافت کنید.

مثال:

(string name, int age) GetPerson()
{
    return ("Ali", 25);
}

var person = GetPerson();
Console.WriteLine($"Name: {person.name}, Age: {person.age}");

// تجزیه
(string name, int age) = GetPerson();
Console.WriteLine($"Name: {name}, Age: {age}");

این قابلیت به بهبود خوانایی کد کمک کرده و نیاز به استفاده از کلاس‌های اضافی برای نگهداری داده‌ها را کاهش می‌دهد.

تطبیق الگو (Pattern Matching)

C# 7.0 امکان Pattern Matching را معرفی کرد که به شما اجازه می‌دهد نوع داده را بررسی کرده و بر اساس آن عملیات انجام دهید. این ویژگی بیشتر در ترکیب با دستور switch یا شرط‌های if استفاده می‌شود.

مثال:

object obj = 42;

if (obj is int number)
{
    Console.WriteLine($"The number is {number}");
}

// استفاده در switch
switch (obj)
{
    case int n when n > 0:
        Console.WriteLine($"Positive number: {n}");
        break;
    case string s:
        Console.WriteLine($"It's a string: {s}");
        break;
    default:
        Console.WriteLine("Unknown type");
        break;
}

این ویژگی کدهای شما را واضح‌تر و انعطاف‌پذیرتر می‌کند.

توابع محلی (Local Functions)

در نسخه 7.0 می‌توانید توابع را درون یک متد دیگر تعریف کنید. این توابع فقط در محدوده متد اصلی قابل دسترسی هستند.

مثال:

void MainFunction()
{
    Console.WriteLine("Main Function");

    void LocalFunction()
    {
        Console.WriteLine("Local Function");
    }

    LocalFunction();
}

MainFunction();

این ویژگی باعث سازمان‌دهی بهتر کد و کاهش پیچیدگی می‌شود.

گسترش اعضای بدن‌دار (Expanded Expression-Bodied Members)

در C# 6.0 ویژگی Expression-Bodied Members معرفی شد، اما در C# 7.0 این ویژگی برای سازنده‌ها (Constructors) و دستورات get و set نیز گسترش یافت.

مثال:

public class Person
{
    private string _name;

    // سازنده
    public Person(string name) => _name = name;

    // ویژگی
    public string Name => _name;
}

این قابلیت کدنویسی را مختصرتر و زیباتر می‌کند.

مقادیر محلی و بازگشت به صورت ارجاعی (Ref Locals and Ref Returns)

در نسخه 7.0 می‌توانید داده‌ها را به صورت ارجاعی بازگردانید یا درون یک متغیر محلی به صورت ارجاعی ذخیره کنید. این قابلیت برای بهینه‌سازی حافظه و عملکرد بسیار مفید است.

مثال:

ref int FindElement(int[] numbers, int value)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] == value)
        {
            return ref numbers[i];
        }
    }
    throw new Exception("Value not found");
}

int[] numbers = { 1, 2, 3, 4 };
ref int element = ref FindElement(numbers, 3);
element = 42;

Console.WriteLine(string.Join(", ", numbers)); // خروجی: 1, 2, 42, 4

دیگر ویژگی‌ها (Other Features)

Discard (نشانگر بی‌اهمیت)

از کاراکتر _ برای حذف مقادیر یا متغیرهایی که نیاز ندارید، استفاده می‌شود.

مثال:

var (_, age) = GetPerson();
Console.WriteLine($"Age: {age}");

اعداد دودویی و جداکننده ارقام (Binary Literals and Digit Separators)

اعداد دودویی با پیشوند 0b و جداکننده‌های _ برای خوانایی بیشتر اضافه شده‌اند.

مثال:

int binaryValue = 0b1010;
int largeNumber = 1_000_000;

عبارات Throw (Throw Expressions)

اکنون می‌توانید از دستور throw در عبارات و مقداردهی استفاده کنید.

مثال:

string name = null;
string displayName = name ?? throw new ArgumentNullException(nameof(name));

نتیجه‌گیری

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

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
ویژگی‌های جدید 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…

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

نظرات

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

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