معرفی 10 ویژگی جدید در برنامه نویسی به زبان سی شارپ

در این بخش قصد داریم نگاهی به ویژگی های جدید در سی شارپ 10 بیاندازیم.

معرفی 10 ویژگی جدید در برنامه نویسی به زبان سی شارپ

معرفی 10 فیچر جدید در زبان برنامه نویسی سی شارپ

در این مقاله قصد داریم نگاهی به موارد جدید در سی شارپ 10 بیاندازیم. NET 6. از آخرین نسخه سی شارپ پشتیبانی می کند و برای استفاده از آن در پروژه های خود به جدیدترین NET 6 SDK. یا Visual Studio 2022 نیاز داریم که شامل SDK است.

بنابراین، بیایید شروع کنیم.

Record Structs در سی شارپ 10

با شروع C# 9، می توانیم از کلمه کلیدی record برای تعریف اشیاء نوع reference غیرقابل تغییر ‘out-of-the-box’ در کد خود با معناهای برابری value استفاده کنیم.

از این به بعد، می توانیم رکوردهای نوع value را با کلمات کلیدی ساختار رکوردی (record struct) اعلام کنیم تا مانند سایر انواع value رفتار کنند. اگر ساختار را حذف کنیم، آنها انواع مرجع (reference types) خواهند بود، اما می توانیم صریح تر صحبت کنیم و کلاس رکورد (record class) را برای رسیدن به همان رفتار بنویسیم.

Custom Interpolated String Handlers

کنترل کننده interpolated رشته ای نوعی است که عبارت مکان یابی را در یک رشته interpolated پردازش می کند:

معرفی 10 فیچر جدید در زبان برنامه نویسی سی شارپ

ما فقط به این نکته توجه می کنیم که به سازنده ای با حداقل دو آرگومان نیاز داریم. دو آرگومان اول در سازنده، ثابت های صحیحی هستند که توسط کامپایلر پر شده اند، که نشان دهنده طول لفظی interpolation و تعداد اجزای interpolation هستند.

با این پیاده سازی، می توانیم کلاس Program را تغییر دهیم:

معرفی 10 فیچر جدید در زبان برنامه نویسی سی شارپ

اکنون، در نتیجه، مقدار متغیر processedMessage برابر با "Code Maze is awesome" است. و می توانیم ببینیم که نحوه نشان دادن مکان نما (placeholder) را در پیاده سازی خود تغییر می دهیم.

Global Using Directives در سی شارپ 10

ما نیازی به استفاده انبوه از directives در ابتدای هر فایل نداریم. ما می توانیم using directives را که در حال حاضر در فایل های Program و CustomInterpolatedStringHandler خود داریم استخراج کنیم.

برای انجام این کار، بیایید فایل Usings.cs را با تمام دستورالعمل های استفاده کننده (using directives) ایجاد کنیم:

معرفی 10 فیچر جدید در زبان برنامه نویسی سی شارپ

با این رویکرد، می توانیم تمام using های سراسری را به یک فایل extract کنیم و از آن در پروژه خود استفاده کنیم.

اما این همه چیز نیست. یک ویژگی جدید در NET 6 SDK. پشتیبانی از using directives ضمنی سراسری است. این یکی از دلایلی است که ما می توانیم Minimal APIs را تنها با چهار خط کد راه اندازی کنیم.

Extended Property Patterns

ما قادریم به فیلدها یا property های تودرتو در یک الگوی property ارجاع دهیم. می توانید درExtended Property Patterns در #C درباره آن بیشتر بخوانید.

بهبود Structure Types

به منظور پشتیبانی از record struct ، ما همچنین برای انواع ساختار ‘normal’ بهبود هایی دریافت کردیم. انواع struct می توانند سازنده بدون پارامتر داشته باشند و می توانند یک فیلد یا ویژگی نمونه را در اعلان آن مقداردهی اولیه کنند:

بهبود Structure Types

اعلان فضای نام با دامنه فایل در سی شارپ 10

ما دیگر نیازی به قرار دادن کد خود در بلوک های کد فضای نام تورفته نداریم:

رشته های Constant Interpolated

همانطور که می بینیم، ما آن پرانتزها برای فضای نامی که در نسخه های قبلی #C داشتیم نداریم.

بهبود Lambda Expression

اکنون Lambda expressions بیشتر شبیه متدها و توابع محلی هستند. آنها می توانند یک نوع طبیعی داشته باشند و کامپایلر یک نوع delegate را از عبارت لامبدا یا یک گروه متد استنتاج می کند. همچنین، می توانیم ویژگی ها را به عبارات لامبدا اعمال کنیم. برای نشان دادن این بهبودها در عمل، اجازه دهید یک متد لامبدا بنویسیم:

بهبود Lambda Expression

در نسخه قبلی سی شارپ، یک خطای کامپایلر دریافت می کنیم که نمی توانیم عبارت lambda را به متغیری که به طور ضمنی تایپ می شود اختصاص دهیم و ویژگی های lambda پشتیبانی نمی شوند.

رشته های Constant Interpolated

از C#10، می توانیم از رشته های ثابت interpolated ثابت هایی تولید کنیم.

برای نشان دادن آن، اجازه دهید $"Code maze is {constantAttribute}." را مقداردهی اولیه کنیم رشته interpolated به عنوان const:

رشته های Constant Interpolated

ما می توانیم این کار را انجام دهیم اگر placeholder ما نیز یک Const باشد.

انواع رکورد می توانند در سی شارپ 10 به ToString تولید شوند!

هنگامی که از انواع record در کد خود استفاده می کنیم، کامپایلر در حال ایجاد پیاده سازی متد ToString برای ما است.

بیایید یک سلسله مراتب ساده از انواع رکورد ایجاد کنیم:

انواع رکورد می توانند در سی شارپ 10 به ToString تولید شوند.

از آنجایی که نمی خواهیم Comment را در نمایش رکورد CodeMazeArticle وارد کنیم، C# 10 به ما اجازه می دهد که sealed modifier را اضافه کنیم، که از ایجاد یک پیاده سازی ToString برای هر رکورد مشتق شده توسط کامپایلر جلوگیری می کند:

10 فیچر جدید در زبان برنامه نویسی سی شارپ

و اکنون می توانیم یک متد ToString را در CodeMazeArticle فراخوانی کنیم:

10 فیچر جدید در زبان برنامه نویسی سی شارپ

در نتیجه، مقدار codeMazeArticleRepresentation "برابر با "Author: Title" است و ما به هدف خود برای ارائه مداوم مقالات خود دست یافته ایم.

تخصیص و اعلام در Deconstruction یکسان

نکته جالب این است که بتوانیم تخصیص ها (assignments) و اعلان ها (declarations) را هنگام ساختارشکنی یا همان deconstructing تاپل های خود ترکیب کنیم:

10 فیچر جدید در زبان برنامه نویسی سی شارپ

پس از deconstruction ، ویژگی های article.Author و article.Title به ترتیب مقادیر "Author" و "Title" را نگه می دارند. همچنین، می توانیم از متغیر codeMazeArticle با مقدار اولیه بیشتر در کد خود استفاده کنیم و property ها را با هم مقایسه کنیم:

10 فیچر جدید در زبان برنامه نویسی سی شارپ

قبل از C# 10، ما فقط می توانستیم همه متغیرها را به متغیرهای موجود اختصاص دهیم یا متغیرهای تازه اعلام شده را مقداردهی اولیه کنیم.

خلاصه مطالب بالا

در پایان، بدون توضیح بیشتر فقط به این موضوع اشاره می کنیم که در سی شارپ 10، assignments قطعی بهبود یافته ای را دریافت کردیم. ما هشدارهای کمتری برای تحلیل های مثبت کاذب خواهیم داشت. همچنین، می توانیم ویژگی AsyncMethodBuilder را روی متدها قرار دهیم و از تشخیص ویژگی CallerArgumentExpression در کد خود استفاده کنیم. به طور خلاصه، در این مقاله، ویژگی های جدید C# 10 را دیدیم که می توانیم از آنها در پروژه های خود استفاده کنیم.

معرفی 10 فیچر جدید در زبان برنامه نویسی سی شارپ آموزش سی شارپ

مقالات این دسته بندی