ویژگی‌های جدید 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 = 'A' and 

ج. Negated Patterns

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

مثال:

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

د. Parenthesized Patterns

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

مثال:

bool IsSeparatorOrLetter(char c) =>
    c is (>= 'a' and = 'A' and 

عدد صحیح با اندازه بومی (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# برداشته است.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
TDD چیست؟

TDD چیست؟

آنچه در این پست میخوانید TDD چیست؟ تاریخچه TDD مراحل انجام TDD مزایای TDD معایب TDD تفاوت TDD با روش‌های…

بیشتر بخوانید
دیزاین پترن Mother Object Pattern چیست؟

الگوی طراحی Mother Object چیست؟

آنچه در این پست میخوانید الگوی طراحی Mother Object چیست؟ چرا باید از Mother Object استفاده کنیم؟ Mother Object در…

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

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

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

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

نظرات

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

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