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

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

نسخه C# 10 در نوامبر 2021 منتشر شد و یکی از اهداف اصلی این نسخه، ساده‌تر و کارآمدتر کردن کدنویسی بود. این نسخه ویژگی‌هایی را اضافه می‌کند که باعث کاهش نیاز به نوشتن کدهای اضافی (ceremony) و در عین حال افزایش عملکرد و کارایی می‌شود. بسیاری از ویژگی‌های جدید در C# 10 به شما کمک می‌کنند تا کدهای کمتری بنویسید و از مزایای بهبودهای جدید در ساختار زبان استفاده کنید.

به علاوه، C# 10 در تلاش است تا با بهبود عملکرد، به خصوص در فریم‌ورک‌هایی مانند .NET 6، به توسعه‌دهندگان امکان دسترسی به عملکردهای بهینه‌شده را بدهد.

در این نسخه، تعدادی ویژگی جدید اضافه شده‌اند که به سادگی و کارایی کد کمک می‌کنند، و همچنین برخی بهبودهای مهم در ساختار داده‌ها و نحو زبان انجام شده است.

Record Structs

یکی از ویژگی‌های جدید C# 10 معرفی رکوردهای استراک (Record Structs) است. رکوردها در نسخه‌های قبلی برای انواع مرجع بودند، اما در این نسخه، می‌توان از رکوردها برای انواع مقداری (مثل ساختارها) هم استفاده کرد. این ویژگی اجازه می‌دهد تا رکوردهایی با رفتار مشابه کلاس‌ها برای انواع مقداری ایجاد کنیم.

مثال کد:

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

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

var point1 = new Point(1, 2);
var point2 = new Point(1, 2);
Console.WriteLine(point1 == point2);  // خروجی: True

در این کد، رکورد Point به عنوان یک نوع مقداری تعریف شده است که با استفاده از عملگر مقایسه (==) مقایسه می‌شود.

Improvements of Struct Types

ساختارها (Structs) در این نسخه بهبودهایی پیدا کرده‌اند. یکی از این بهبودها With Expressions است که پیش از این فقط برای رکوردها قابل استفاده بود، اما حالا ساختارها هم از این ویژگی بهره‌مند می‌شوند. این ویژگی به شما اجازه می‌دهد بدون تغییر نسخه اصلی، نسخه‌ای جدید از یک ساختار بسازید.

مثال کد:

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

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

    public Point WithX(int newX) => this with { X = newX };
}

var point = new Point(1, 2);
var newPoint = point.WithX(3);
Console.WriteLine(newPoint.X);  // خروجی: 3

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

Interpolated String Handler

مدیرهای رشته‌های درون‌یابی‌شده (Interpolated String Handlers) به شما اجازه می‌دهند که نحوه مدیریت رشته‌ها را بهینه کنید و از آن‌ها به طور کارآمدتر استفاده کنید. این ویژگی می‌تواند عملکرد را بهبود بخشد.

مثال کد:

public static void LogMessage([InterpolatedStringHandlerArgument("logLevel")] ref MyStringHandler handler)
{
    // این متد به کمک مدیریت‌کننده رشته‌ها عمل می‌کند
}

string name = "John";
LogMessage($"Hello {name}");

در این مثال، MyStringHandler یک مدیریت‌کننده سفارشی است که برای بهینه‌سازی استفاده از رشته‌ها ساخته شده است.

Global Using Directives

Directives جهانی به شما این امکان را می‌دهند که با یک دستور using به طور جهانی در سراسر برنامه از فضاهای نام استفاده کنید. این ویژگی باعث می‌شود که دیگر نیازی به اضافه کردن دستور using در هر فایل نباشد.

مثال کد:

// در فایل .csproj
<PropertyGroup>
    <LangVersion>10</LangVersion>
</PropertyGroup>

// در ابتدای برنامه
global using System;
global using MyNamespace;

با استفاده از global using، شما می‌توانید فضای نام‌ها را در سطح پروژه برای همه فایل‌ها استفاده کنید.

File-scoped Namespace Declaration

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

مثال کد:

// قبل از C# 10
namespace MyNamespace
{
    public class MyClass { }
}

// بعد از C# 10
namespace MyNamespace;
public class MyClass { }

در اینجا، فضای نام فقط برای فایل تعریف شده است و نیازی به استفاده از بلوک‌های {} نیست.

Extended Property Patterns

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

مثال کد:

var point = new { X = 5, Y = 10 };

if (point is { X: 5, Y: 10 })
{
    Console.WriteLine("Point is at (5, 10)");
}

در اینجا از الگوی ویژگی استفاده شده است تا چک کنیم که آیا ویژگی‌های X و Y مقادیر خاصی دارند یا خیر.

Improvements on Lambda Expressions

در C# 10 بهبودهایی در تعریف lambda expressions اضافه شده است. این بهبودها به شما امکان می‌دهند تا لامبداها را به طور ساده‌تر و کارآمدتری تعریف کنید.

مثال کد:

Func add = (x, y) => x + y;
Console.WriteLine(add(5, 3));  // خروجی: 8

این نوع لامبداها در C# 10 به‌طور موثرتری می‌توانند مورد استفاده قرار گیرند.

نتیجه‌گیری

C# 10 با ویژگی‌هایی همچون Record Structs، Global Using Directives و بهبودهایی در Lambda Expressions و String Interpolation، به‌طور قابل توجهی کدنویسی را ساده‌تر و کارآمدتر کرده است. همچنین، ویژگی‌هایی مثل File-scoped Namespace Declaration و Improved Struct Types به توسعه‌دهندگان این امکان را می‌دهند که کدهایی تمیزتر و خواناتر بنویسند.

پست های مرتبط

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

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

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

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

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

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

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

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

آنچه در این پست میخوانید رکوردها (Records) عبارات سطح بالا (Top-level Statements) بهبودهای Pattern Matching عدد صحیح با اندازه بومی…

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

نظرات

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

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