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

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

تاریخ انتشار: سپتامبر 2019

نسخه C# 8.0 اولین نسخه بزرگ زبان C# است که به طور ویژه برای .NET Core طراحی شده است. برخی از ویژگی‌های این نسخه به قابلیت‌های جدید Common Language Runtime (CLR) متکی هستند و برخی دیگر به انواع جدیدی که در کتابخانه‌های .NET Core 3.0 اضافه شده‌اند وابسته‌اند. این نسخه شامل ویژگی‌ها و بهبودهای زیادی است که تجربه توسعه‌دهندگان را بهبود می‌بخشد و امکانات بیشتری برای کدنویسی فراهم می‌کند.

اعضای Readonly

این ویژگی به شما اجازه می‌دهد که متدها یا ویژگی‌های داخل یک struct را فقط خواندنی (Read-only) تعریف کنید. به این معنا که این متدها نمی‌توانند حالت struct را تغییر دهند.

مثال:

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

    public readonly double Distance => Math.Sqrt(X * X + Y * Y);
}

متدهای پیش‌فرض در اینترفیس‌ها (Default Interface Methods)

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

مثال:

public interface ILogger
{
    void Log(string message);

    void LogInfo(string message) => Log($"INFO: {message}");
}

بهبودهای Pattern Matching

C# 8.0 امکانات جدیدی برای Pattern Matching معرفی کرده است که شامل موارد زیر می‌شود:

الف. Switch Expressions

این نوع جدید از عبارت Switch کدنویسی را کوتاه‌تر و خواناتر می‌کند.

مثال:

string GetColorName(Color color) => color switch
{
    Color.Red => "Red",
    Color.Green => "Green",
    Color.Blue => "Blue",
    _ => "Unknown"
};

ب. Property Patterns

امکان بررسی مقادیر ویژگی‌ها (Properties) را در یک الگوی مشخص فراهم می‌کند.

مثال:

bool IsAdult(Person person) => person is { Age: >= 18 };

ج. Tuple Patterns

قابلیت تطبیق الگوها با Tupleها اضافه شده است.

مثال:

string GetDirection((int x, int y) point) => point switch
{
    (0, 1) => "Up",
    (0, -1) => "Down",
    _ => "Unknown"
};

د. Positional Patterns

تطبیق الگوها با مقادیر موقعیتی (Positional) نیز ممکن شده است.

مثال:

public class Point
{
    public int X { get; }
    public int Y { get; }
    public void Deconstruct(out int x, out int y) => (x, y) = (X, Y);
}

bool IsOrigin(Point point) => point is (0, 0);

Using Declarations

این قابلیت به شما اجازه می‌دهد که یک شیء را با استفاده از کلمه کلیدی using تعریف کنید و نیازی به بلاک اضافی برای مدیریت منابع نداشته باشید.

مثال:

using var file = new StreamReader("example.txt");
Console.WriteLine(file.ReadToEnd());

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

این ویژگی امکان تعریف توابع محلی را که به متغیرهای محیطی دسترسی ندارند، فراهم می‌کند.

مثال:

int Add(int a, int b)
{
    static int Sum(int x, int y) => x + y;
    return Sum(a, b);
}

Nullable Reference Types

با این ویژگی، می‌توانید مشخص کنید که آیا یک نوع مرجع می‌تواند مقدار null بگیرد یا خیر. این قابلیت برای کاهش خطاهای مربوط به NullReferenceException بسیار مفید است.

مثال:

#nullable enable
string? nullableString = null; // قابل قبول
string nonNullableString = null; // خطا

شاخص‌ها و بازه‌ها (Indices and Ranges)

این ویژگی امکان دسترسی ساده‌تر به عناصر آرایه یا لیست را فراهم می‌کند.

مثال:

int[] numbers = { 1, 2, 3, 4, 5 };
int lastNumber = numbers[^1]; // آخرین عنصر
int[] subArray = numbers[1..3]; // عناصر 1 تا 3

استریم‌های ناهمگام (Asynchronous Streams)

C# 8.0 از بازگرداندن داده‌های ناهمگام (Asynchronous) به صورت استریم پشتیبانی می‌کند.

مثال:

async IAsyncEnumerable GetNumbersAsync()
{
    for (int i = 1; i <= 10; i++)
    {
        await Task.Delay(100);
        yield return i;
    }
}

تخصیص Null-Coalescing (Null-Coalescing Assignment)

با این ویژگی می‌توانید یک مقدار پیش‌فرض را به متغیری که مقدار null دارد تخصیص دهید.

مثال:

int? number = null;
number ??= 5; // مقدار 5 به number تخصیص داده می‌شود.

بهبود رشته‌های Verbatim و Interpolated

اکنون می‌توانید از رشته‌های Verbaitm (مانند @) همراه با Interpolated Strings استفاده کنید.

مثال:

string path = @$"C:Users{Environment.UserName}Documents";

نتیجه‌گیری

نسخه C# 8.0 امکانات گسترده‌ای برای بهبود کارایی و خوانایی کد فراهم کرده است. با تمرکز روی .NET Core و قابلیت‌هایی نظیر استریم‌های ناهمگام و شاخص‌ها و بازه‌ها، این نسخه یکی از پیشرفته‌ترین نسخه‌های 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…

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

نظرات

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

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