ویژگیهای جدید 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 به توسعهدهندگان این امکان را میدهند که کدهایی تمیزتر و خواناتر بنویسند.
And To Do So From Now Until The Death, Whatever the Cost
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام