قابلیت‌های جدید C# 13 (توضیحات ساده برای دانشجوها):

قابلیت‌های جدید C# 13 (توضیحات ساده برای دانشجوها):

c sharp 13 new features
c sharp 13 new features


1. Params Collections

قابلیت استفاده از مجموعه‌ها به‌عنوان آرگومان‌های پارامتر `params`. به جای ارسال یک آرایه، می‌توانید از هر **نوع مجموعه**‌ای مثل `List`، `HashSet` یا حتی `Span` استفاده کنید.


- چرا مفید است؟

دیگر لازم نیست آرایه بسازید؛ می‌توانید مستقیماً از هر نوع مجموعه استفاده کنید.


- مثال:

     void PrintItems(params IReadOnlyList<int> items)
     {
         foreach (var item in items)
         {
             Console.WriteLine(item);
         }
     }


PrintItems(new List<int> { 1, 2, 3 }); // مستقیماً لیست ارسال شد

PrintItems(new int[] { 4, 5, 6 }); // یا آرایه

```

- ساده بگو:

قبلاً فقط آرایه می‌فرستادی، حالا هر چیزی که شبیه آرایه باشه می‌تونی بفرستی!


---


2. New Lock Type

- چیست؟

یک نوع جدید برای مدیریت همزمانی (Concurrency). این نوع جدید به جای استفاده از `lock` سنتی، می‌تواند قفل‌هایی تعریف کند که به صورت ساده‌تر و امن‌تر عمل کنند.


- چرا مفید است؟

برای جلوگیری از خطاهای پیچیده در برنامه‌های چند نخی (Multithreaded) و بهبود عملکرد.


- مثال:


     scoped Lock myLock = new Lock();
     lock (myLock)
     {
         // کد محافظت شده
         Console.WriteLine(&quotThread-safe code here!&quot);
     }



- ساده بگو:

نوع جدید قفل گذاشتن امن‌تره، مخصوصاً وقتی با چند تا نخ (Thread) کار می‌کنی.



3. New Escape Sequence `\e`

- چیست؟

یک کاراکتر فرار (Escape Sequence) جدید اضافه شده که کدهای کنترلی ANSI یا همان رنگ‌بندی و دستورات خاص ترمینال/کنسول را پشتیبانی می‌کند.


- چرا مفید است؟

می‌توانید مستقیماً متن‌هایی با رنگ یا فرمت خاص در کنسول چاپ کنید.


- مثال:


     Console.WriteLine(&quot\e[31mThis text is red!\e[0m&quot);


در اینجا:

- `\e[31m`: رنگ متن را قرمز می‌کند.

- `\e[0m`: به حالت عادی برمی‌گرداند.


- ساده بگو:

می‌تونی راحت توی کنسول، متن رنگی یا استایل دار نشون بدی.



4. Init Array with Index Operator `^`

- چیست؟

حالا می‌توانید آرایه‌ها را به کمک اپراتور `^` (که معمولاً برای دسترسی از انتهای آرایه استفاده می‌شود) مقداردهی اولیه کنید.


- چرا مفید است؟

کد شما خواناتر و انعطاف‌پذیرتر می‌شود.


- مثال:


     var arr = new int[5] { 1, 2, 3, 4, 5 };
     arr[^2] = 10; // مقدار دوم از انتها را 10 می‌گذارد
     Console.WriteLine(arr[^2]); // چاپ 10



- ساده بگو:

می‌تونی راحت‌تر از انتهای آرایه مقدارها رو تغییر بدی یا بخونی.


---


5. Relaxed Constraints on `ref struct` and `ref variables`

- چیست؟

محدودیت‌های قبلی روی `ref struct` و متغیرهای ارجاعی (`ref`) کمتر شده است. حالا می‌توانید از این نوع‌ها در سناریوهای بیشتری مثل **Lambda Expressions** و **Async Methods** استفاده کنید.


- چرا مفید است؟

محدودیت‌های قدیمی باعث می‌شد در بعضی موارد کدهای بی‌دلیل پیچیده بنویسید. این قابلیت، کد را ساده‌تر می‌کند.


- مثال:


     ref struct MyRefStruct
     {
         public int Value;
     }
     async Task UseRefStruct()
     {
         MyRefStruct myRef = new MyRefStruct { Value = 42 };
         await Task.Delay(1000);
         Console.WriteLine(myRef.Value); // محدودیت قبلی حذف شد
     }



- ساده بگو:

حالا می‌تونی راحت‌تر از `ref` و `ref struct` توی توابع پیچیده استفاده کنی، مثل Async و Lambda.


---


جمع‌بندی:

- **Params Collections:** حالا می‌تونی مستقیم لیست یا مجموعه‌ها رو ارسال کنی.

- **New Lock Type:** قفل ساده‌تر و امن‌تر برای کارهای چند نخی.

- **Escape Sequence `\e`:** کنسول رنگی و جذاب‌تر.

- **Init Array with `^`:** راحت‌تر مقداردهی و تغییر از انتهای آرایه.

- **Relaxed Ref Constraints:** استفاده راحت‌تر از `ref struct` و متغیرهای ارجاعی در جاهای بیشتری.


اگر جایی نیاز به توضیح بیشتر هست، کامنت بزار! 😊