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

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

تاریخ انتشار: نوامبر 2020
C# 9 همراه با .NET 5 عرضه شد و به عنوان نسخه پیش‌فرض زبان برای تمامی پروژه‌هایی که .NET 5 را هدف قرار می‌دهند، تعیین گردید. این نسخه شامل ویژگی‌های جدید و بهبودهایی است که تجربه توسعه‌دهندگان را ساده‌تر و کارآمدتر می‌کند.

رکوردها (Records)

رکوردها نوعی مرجع (Reference Type) هستند که از مفاهیم معنایی مقدار برای مقایسه و تساوی استفاده می‌کنند. این ویژگی یک راه ساده و مختصر برای تعریف کلاس‌هایی است که به عنوان داده‌محور شناخته می‌شوند و معمولاً رفتار کمتری دارند.

مثال:

public record Person(string FirstName, string LastName);

ویژگی‌های مرتبط با رکوردها:

  • Init-only setters: رکوردها از setterهایی استفاده می‌کنند که فقط در زمان مقداردهی اولیه قابل استفاده هستند.
  • Covariant return types: رکوردهای مشتق شده می‌توانند متدهای مجازی را بازنویسی کرده و نوعی مشتق‌شده از نوع بازگشتی پایه را برگردانند.

عبارات سطح بالا (Top-level Statements)

این ویژگی امکان نوشتن برنامه‌های ساده‌تر را بدون نیاز به تعریف namespace، کلاس Program و متد Main() فراهم می‌کند.

مثال:

Console.WriteLine("Hello, World!");

بهبودهای Pattern Matching

قابلیت‌های Pattern Matching در C# 9 گسترش یافته‌اند و اکنون شامل موارد زیر هستند:

الف. Relational Patterns

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

مثال:

bool IsPositive(int number) => number is > 0;

ب. Logical Patterns

این الگوها از عملیات منطقی and، or، و not پشتیبانی می‌کنند.

مثال:

bool IsLetter(char c) => c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';

ج. Negated Patterns

این الگوها بررسی می‌کنند که یک شرط برقرار نباشد.

مثال:

if (obj is not null)
{
    Console.WriteLine("Object is not null.");
}

د. Parenthesized Patterns

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

مثال:

bool IsSeparatorOrLetter(char c) =>
    c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';

عدد صحیح با اندازه بومی (Native Sized Integers)

نوع‌های nint و nuint برای نمایش اعداد صحیح با اندازه وابسته به CPU معرفی شده‌اند.

مثال:

nint nativeInt = 10;

اشاره‌گرهای تابع (Function Pointers)

این ویژگی مشابه delegate‌ها عمل می‌کند اما بدون تخصیص اضافی حافظه برای اشیاء.

مثال:

delegate* addPointer = &Add;

static int Add(int x, int y) => x + y;

حذف دستور Localsinit

این ویژگی اجازه می‌دهد که دستور localsinit حذف شود تا عملکرد بهبود یابد و دستورالعمل‌های اضافی حذف شوند.

مقداردهی اولیه ماژول‌ها (Module Initializers)

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

مثال:

class Program
{
    [ModuleInitializer]
    public static void Init() => Console.WriteLine("Module Initialized");
}

متدهای Partial بهبودیافته

اکنون می‌توان متدهای partial را با modifiers جدید تعریف کرد و نوع بازگشتی غیر از void داشت.

عبارات Conditional و New با نوع هدف (Target-Typed Expressions)

با این ویژگی، نوع هدف (Target Type) مشخص می‌کند که نتیجه عبارت چه نوعی باشد.

مثال:

List numbers = new(); // نوع لیست از سمت چپ برداشت می‌شود.

بهبودهای Productivity و Fit & Finish

C# 9 شامل مجموعه‌ای از ویژگی‌های کوچک برای افزایش بهره‌وری است:

  • Lambda discard parameters: امکان استفاده از پارامترهای نامشخص در عبارات lambda.
  • Attributes on local functions: امکان استفاده از attributes روی توابع محلی.
  • Extension GetEnumerator: پشتیبانی از GetEnumerator در حلقه‌های foreach.

مثال:

foreach (var item in myCollection)
{
    Console.WriteLine(item);
}

جمع‌بندی

نسخه C# 9 قابلیت‌های جدیدی ارائه می‌دهد که با تمرکز بر ساده‌تر کردن کدنویسی و افزایش کارایی طراحی شده‌اند. از رکوردها تا بهبودهای Pattern Matching و امکانات جدید در مدیریت حافظه، این نسخه یک قدم دیگر برای مدرن‌تر کردن زبان 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…

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

نظرات

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

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