ویژگیهای جدید C# 8
- اعضای Readonly
- متدهای پیشفرض در اینترفیسها (Default Interface Methods)
- بهبودهای Pattern Matching
- Using Declarations
- توابع محلی استاتیک (Static Local Functions)
- Nullable Reference Types
- شاخصها و بازهها (Indices and Ranges)
- استریمهای ناهمگام (Asynchronous Streams)
- تخصیص Null-Coalescing (Null-Coalescing Assignment)
- بهبود رشتههای Verbatim و Interpolated
- نتیجهگیری
تاریخ انتشار: سپتامبر 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# محسوب میشود.
And To Do So From Now Until The Death, Whatever the Cost
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام