از سازنده های اولیه و عبارات مجموعه گرفته تا پارامترهای لامبدا پیش فرض، C# 12 دارای ویژگی های جدید بسیاری است که ساخت برنامه های کاربردی مدرن و انعطاف پذیر را ساده می کند.
C# 12 در نوامبر با .NET 8 وارد شد و چندین ویژگی جدید را به همراه داشت – سازنده های اصلی، عبارات مجموعه، آرایه های درون خطی و موارد دیگر – که آن را ساده تر و آسان تر می کند. برای نوشتن کد کارآمدتر همانطور که قبلاً از برترینهای NET 8 گذشتیم، در این مقاله نگاهی دقیق به ویژگیهای جدید کلیدی در C# 12 خواهیم داشت.
برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخهای ندارید، میتوانید Visual Studio 2022 را از اینجا بارگیری کنید.
یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید
ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه ویژوال استودیو ۲۰۲۲ را نصب کرده اید، مراحل زیر را دنبال کنید تا یک پروژه برنامه کاربردی کنسول .NET Core جدید در ویژوال استودیو ایجاد کنید.
- Visual Studio IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
- بعدی را کلیک کنید.
- در پنجره “اطلاعات اضافی” نشان داده شده در ادامه، “NET 8.0 (پشتیبانی طولانی مدت)” را به عنوان نسخه چارچوبی که می خواهید استفاده کنید انتخاب کنید.
- روی ایجاد کلیک کنید.
ما از این پروژه برنامه کاربردی کنسول NET 8 برای کار با ویژگیهای جدید C# 12 در بخشهای بعدی این مقاله استفاده خواهیم کرد.
سازنده های اولیه در C# 12
سازندههای اولیه یک ویژگی جدید در C# 12 هستند که به شما امکان میدهند سازندههایی را که پارامترهای آنها در سراسر بدنه نوع موجود است را اعلام کنید. آنها شما را قادر می سازند که سازنده ها را به صورت هم راستا با اعلان نوع اعلام کنید و در نتیجه نحو را دقیق تر و مختصرتر می کنند.
اکنون می توانید سازنده های اولیه را در هر ساختار یا کلاس ایجاد کنید. شما دیگر محدود به ایجاد سازنده های اولیه فقط در انواع رکورد نیستید. با استفاده از سازنده های اولیه، دیگر نیازی به تعاریف سازنده جداگانه ندارید.
قطعه کد زیر یک سازنده اولیه اعلام شده در داخل یک ساختار را نشان می دهد.
public readonly struct Rectangle(double x, double y) { public readonly double Area { get; } = x * y; }
شما معمولاً می خواهید از سازنده اصلی در هر یک از سناریوهای زیر استفاده کنید:
- برای مقداردهی اولیه یک عضو یا یک فیلد از نوع حاوی
- به عنوان آرگومان هنگام فراخوانی سازنده base()
- برای ارجاع به یک پارامتر سازنده در یک عضو نمونه از نوع حاوی
در زیر یک پیاده سازی ساده از یک سازنده اولیه که در داخل یک کلاس اعلام شده است.
است
public class Author(int Id, string firstName, string lastName) { public int Id { get; } = Id; public string FirstName { get; } = firstName; public string LastName { get; } = lastName; public override string ToString() => $"Author Id: {Id}, First Name: {FirstName}, Last Name: {LastName}"; }
توجه داشته باشید که متد ToString() در کلاس Author رد شده است. در نتیجه، میتوانید نمونهای از کلاس Author را با ارسال پارامترها به سازنده اصلی آن ایجاد کنید و سپس متد ToString() را روی نمونه فراخوانی کنید تا مقدار آن ویژگیها نمایش داده شود. این در قطعه کد زیر نشان داده شده است.
Author author = new Author(1, "Joydip", "Kanjilal"); Console.WriteLine(author.ToString());
عبارات مجموعه در C# 12
قبل از C# 12، برای مقداردهی اولیه یک مجموعه List
شما می توانید از عبارات مجموعه برای پر کردن مجموعه ها با مقادیر از پیش تعریف شده در سناریوهای مختلف استفاده کنید و مستقیماً یک مجموعه را با عناصر آن مقداردهی اولیه کنید و نیازی به چندین خط کد را از بین ببرید. در زیر نمونه ای از استفاده از عبارت مجموعه برای مقداردهی اولیه لیست رشته ها آمده است.
List daysOfWeek = new() { "Sunday","Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday" };
در قطعه کد بالا، عبارت مجموعه { “یکشنبه”، “دوشنبه”، “سه شنبه”، “چهارشنبه”، “پنجشنبه”، “جمعه”، “شنبه” } برای مقداردهی اولیه لیست استفاده می شود. همانطور که می بینید، این نحو بسیار مختصرتر و خواناتر از اضافه کردن هر یک از عناصر مجموعه به طور جداگانه است.
آرایه های درون خطی در C# 12
آرایه درون خطی آرایه ای مبتنی بر ساختار با اندازه ثابت است که می توانید از آن برای افزایش کارایی کد خود هنگام مدیریت بافرها استفاده کنید. قبل از آرایههای درون خطی، میتوانید بلوکهای حافظه را با استفاده از stackalloc یا اشارهگرها دستکاری کنید – با این حال، چنین تکنیکهایی لازم است که اسمبلی خود را با استفاده از کلمه کلیدی ناامن بهعنوان ناامن علامتگذاری کنید. با C# 12، می توانید یک آرایه درون خطی را برای کار با یک بلوک حافظه بدون استفاده از کلمه کلیدی ناامن اعلام کنید.
در اینجا چگونه می توانید یک آرایه درون خطی را در C# 12 اعلام کنید:
[System.Runtime.CompilerServices.InlineArray(50)] public struct Buffer { private int _element; }
اکنون می توانید از آرایه درون خطی خود به همان روشی که از هر آرایه دیگری در C# استفاده می کنید استفاده کنید.
پارامترهای لامبدا پیش فرض در C# 12
C# 12 به شما امکان میدهد مقادیر پارامترهای پیشفرض را در عبارات لامبدا مشخص کنید، دقیقاً مانند یک متد یا یک تابع محلی در C#. این ویژگی می تواند عبارات لامبدا را انعطاف پذیرتر و رساتر کند. قطعه کد زیر نشان می دهد که چگونه می توانید یک مقدار پارامتر پیش فرض را در یک عبارت لامبدا در C# 12 تعیین کنید.
var AddIntegers = (int x, int y = 1) => x + y;
سپس میتوانید عبارت لامبدا را مطابق شکل زیر فراخوانی کنید.
Console.WriteLine(AddIntegers(10)); Console.WriteLine(AddIntegers(10, 5));
پارامترهای فقط خواندنی را در C# 12 رجوع کنید
پشتیبانی از پارامترهای فقط خواندنی ref در ابتدا در C# 7.2 معرفی شد، که به شما امکان میدهد پارامترها را با مرجع در یک زمینه فقط خواندنی ارسال کنید، بنابراین هرگونه تغییر در پارامتر را غیرفعال کنید.
C# 12 با استفاده از پارامترهای ref only read در چندین سناریو دیگر بر اساس این ویژگی ساخته شده است. زمانی که مقدار پارامتر را تغییر نمیدهید، بلکه فقط به مکان حافظه آن دسترسی دارید، باید از پارامترهای فقط خواندنی ref در روشی استفاده کنید.
در اینجا مثالی از نحوه استفاده از پارامترهای فقط خواندنی ref در C# 12 آورده شده است:
void Display(in int x, in int y) { Console.WriteLine($"The value of x is : {x}, the value of y is : {y}"); }
در قطعه کد بالا، متد Display دو پارامتر x و y را هر دو مانند پارامترها می پذیرد. استفاده از کلمه کلیدی in در پارامترهای متد به این معنی است که این پارامترها با مرجع فقط خواندنی ارسال می شوند و به همین دلیل نمی توان آنها را تغییر داد. هنگامی که می خواهید اشیاء بزرگ را با مرجع به متدها منتقل کنید و از هزینه کپی غیرضروری روش اجتناب کنید و در عین حال از تغییرناپذیری پارامترها اطمینان حاصل کنید، ممکن است بخواهید از پارامترهای فقط خواندنی ref استفاده کنید.
Interceptors در C# 12
C# 12 شامل یکی دیگر از ویژگی های هیجان انگیز به نام رهگیر است. رهگیرها می توانند به شما کمک کنند تا یک فراخوانی متد را با یک روش جایگزین جایگزین یا رهگیری کنید. میتوانید از این ویژگی برای تغییر مسیر تماسهای روش بدون تغییر کد اصلی استفاده کنید.
رهگیرها یک ویژگی آزمایشی هستند که در حالت پیشنمایش موجود است. آنها برای استفاده در تولید توصیه نمی شوند زیرا مایکروسافت می تواند در نسخه های بعدی زبان تغییراتی در این ویژگی ایجاد کند. میتوانید اطلاعات بیشتری درباره رهگیرها در اینجا بخوانید. .
TargetFramework .NET 8
توجه داشته باشید که برای کار با C# 12 باید .NET 8 را در رایانه خود نصب کرده باشید. اگر می خواهید پروژه های موجود خود را برای استفاده از C# 12 تغییر دهید، باید TargetFramework را به NET 8. همانطور که در نشان داده شده است مشخص کنید. قطعه کد ارائه شده در زیر.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> ... </PropertyGroup> </Project>
C# 12 کار با سی شارپ را آسانتر از همیشه میکند. میتوانید در مورد ویژگیهای جدید در C# 12 اینجا و اینجا.
پست های مرتبط
بهترین ویژگی های جدید در سی شارپ ۱۲
بهترین ویژگی های جدید در سی شارپ ۱۲
بهترین ویژگی های جدید در سی شارپ ۱۲