
آموزش قابلیت های جدید سی شارپ 11
آموزش قابلیت های جدید سی شارپ 11 یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی، آموزش قابلیت های جدید Csharp 11 است که با نام اصلی Whats New in Csharp 11 از شرکت Pluralsight منتشر شده است.
قابلیت های زبان برنامه نویسی سی شارپ ۱۱
در نسخه یازدهم از زبان برنامه نویسی سی شارپ که امروزه یکی از محبوب ترین زبان های برنامه نویسی برای توسعه اپلیکیشن های مختلف می باشد، قابلیت های بسیار جذابی لحاظ گردیده اند. استفاده از این قابلیت ها می تواند قدرت کدنویسی برنامه نویس را ارتقا بدهد و حتی از حجم کدهای نوشته شده بکاهد. در قسمت زیر لیستی اجمالی از این قابلیت ها را قرار داده ایم و سپس به طور ویژه در رابطه با یکی از این قابلیت ها صحبت خواهیم کرد.
- قابلیت Raw String Literal ها
- قابلیت پشتبانی از Generic Math
- قابلیت Generic attribute ها
- قابلیت UTF-8 String Literal ها
- قابلیت استفاده کردن از خطای جدید در String Interpolation ها
- قابلیت List Pattern ها
- قابلیت File-local type ها
- قابلیت امکان ایجاد کردن Member های Required
- قابلیت Auto-default Struct ها
- قابلیت های جدید Nameof
- قابلیت IntPtr عددی
- قابلیت Ref Field ها و Scoped Ref ها
- قابلیت های بهبود یافته تبدیل شدن Method Group ها به Delegate
در نسخه یازدهم از زبان برنامه نویسی سی شارپ امکان تعریف کردن یک کلاس جنریک که کلاس پدر و یا base class مربوط به آن از نوع System.Attribute باشد وجود دارد. این قابلیت جدید باعث می شود که روشی ساده تر با syntax ساده تری برای نوشتن attribute هایی که نیازمند یک پارامتر از نوع System.Type می باشند را داشته باشیم. در نسخههای قبلی زبان سی شارپ امکان این کار وجود نداشت و برای پیاده سازی کردن جنین موضوعی نیازمند ایجاد کردن یک attribute که یک type را به عنوان پارامتر تابع سازنده دریافت کند بودیم. کدی که در قسمت زیر مشاهده می کنید انجام چنین کاری را در نسخه های قبل تر از نسخه یازدهم نشان می دهد.
// Before C# 11:
public class TypeAttribute : Attribute
{
public TypeAttribute(Type t) => ParamType = t;
public Type ParamType { get; }
}
سپس برای اعمال کردن این attribute از عملگر typeof شبیه به کد زیر استفاده کنیم.
[TypeAttribute(typeof(string))]
public string Method() => default;
حال با استفاده از این قابلیت جدید در زبان برنامه برنامه نویسی سی شارپ ۱۱ می توانیم یک attribute را شبیه به کد زیر ایجاد
کنیم.
// C# 11 feature:
public class GenericAttribute : Attribute { }
سپس شبیه به کد زیر type parameter های مورد نظر برای استفاده شدن در attribute که ایجاد شده را لحاظ می کنیم.
[GenericAttribute()]
public string Method() => default;
یکی از نکات مهم مربوط به استفاده کردن از این روش این است که تمامی type parameter را در زمان اعمال کردن اطلاعات مورد نظر بایستی لحاظ بگردند. به عبارت دیگر، تایپ جنریک استفاده شده باید به صورت کامل ساخته بشود. در مثال بالا، جفت پرانتز های باز و بسته می توانند حذف بگردند چرا که این attribute هیچ آرگومانی ندارد.
public class GenericType
{
[GenericAttribute()] // Not allowed! generic attributes must be fully constructed types.
public string Method() => default;
}
نکته دیگر اینکه type argument ها می بایست به طور کامل محدودیت هایی که در استفاده کردن از عملگر typeof نیز وجود دارند اعمال می کنیم. استفاده کردن از type هایی که نیاز به metadata annotation ندارند امکان پذیر نمی باشد. به عنوان مثال، استفاده کردن از type های زیر به عنوان type parameter امکان پذیر نخواهد بود.
dynamic string? (int X, int Y)
این type ها به طور مستقیم در متادیتا نمایش داده نشدند به عبارت دیگر، آنها شامل annotation هایی هستند که type مورد نظر را توصیف می کند.

در چنین شرایطی می توانید از type زیرین استفاده کنید. برای مثال، از object به جای dynamic و از string به جای string? و از ValueTuple<int, int> به جای (int X, int Y) استفاده کنید.
Raw String Literal و UTF-8؛ راههای تازه برای نوشتن رشتهها در C# 11
در C# 11، قابلیت `Raw String Literal` نوشتن رشتههایی را که شامل نقلقول، خط جدید یا کاراکترهای خاص هستند سادهتر میکند. این آموزش ابتدا استفاده از رشتههای خام را بررسی میکند و سپس به شکل چندخطی آن میپردازد. این قابلیت هنگام قرار دادن متنهای قالبدار، قطعههای پیکربندی یا محتوایی که به حفظ شکل اصلی آن نیاز دارید، میتواند از پیچیدگی فراردهی کاراکترها بکاهد. همچنین، نحوه استفاده از چندین خط کد در `Interpolated String`ها بررسی میشود تا بتوانید متنهای ترکیبی را با خوانایی بیشتری بنویسید.
بخش دیگری از آموزش به `UTF-8 String Literal`ها اختصاص دارد؛ قابلیتی که برای تولید دادههای رشتهای با نمایش UTF-8 در سناریوهای مشخص کاربرد دارد. آشنایی با این ویژگیها به شما کمک میکند هنگام کار با متنهای چندخطی یا دادههایی که به رمزگذاری مشخص وابستهاند، انتخاب مناسبتری داشته باشید. آموزش این تغییرات را در چارچوب قابلیتهای C# 11 بررسی میکند و بر استفاده عملی از نحو جدید زبان تمرکز دارد. برای توسعهدهندگانی که کدهای موجود را نگهداری میکنند یا از نسخههای قدیمیتر C# به نسخه 11 میآیند، شناخت این امکانات میتواند به سادهتر شدن بخشهایی از کد منجر شود.
Generic Math و List Pattern در قابلیتهای پیشرفته C# 11
C# 11 امکاناتی را برای کار با انواع عمومی و الگوهای تطبیق توسعه میدهد. در این آموزش، `Generic Math Support` بررسی میشود؛ قابلیتی که امکان تعریف عملیات ریاضی عمومیتری را فراهم میکند، بهگونهای که کد بتواند با انواع عددی مختلف کار کند، مشروط بر اینکه نوع موردنظر قراردادهای لازم را پیادهسازی کرده باشد. همچنین، تعریف اعضای `Abstract` و `Static` در `Interface`ها مطرح میشود که در طراحی قراردادهای عمومی و پیادهسازی رفتارهای مرتبط با انواع مختلف اهمیت دارد. این مباحث به شما کمک میکنند ارتباط میان قابلیتهای جدید زبان و طراحی کد قابلاستفاده مجدد را بهتر بشناسید.

در بخش Patternها، آموزش به `List Pattern` میپردازد و نحوه استفاده از آن را همراه با رشتهها و `Span`ها بررسی میکند. این قابلیت به شما اجازه میدهد شکل و عناصر یک توالی را در قالب الگو بررسی کنید، بدون آنکه برای هر حالت الزاماً شرطهای متعدد بنویسید. موضوعاتی مانند Attributeهای عمومی و کاربردهای جدید `nameof` نیز در این آموزش قرار دارند و نشان میدهند تغییرات C# 11 تنها به نوشتن رشتهها محدود نیستند. آشنایی با این قابلیتها برای توسعهدهندگانی مفید است که میخواهند کدهای مبتنی بر الگو، قراردادهای نوعی و اجزای عمومی را با امکانات جدید زبان بهروز کنند.
سرفصل مطالب آموزش ویدئویی قابلیت های جدید سی شارپ 11
فصل اول: مقدمه دوره آموزشی- مقدمه دوره آموزشی
- خوش آمدگویی و راه اندازی محیط توسعه
- کار کردن با Raw String Literal
- کار کردن با Raw String Literal چند خطی
- استفاده کردن از چندین خط کد در Interpolated String ها
- استفاده کردن از String Literal های UTF-8
- تعریف کردن اعضای Abstract و Static در Interface ها
- بررسی قابلیت Generic Math Support
- تعریف کردن Attribute های Generic
- کاربردهای جدید Nameof
- Matching و Method Group ها بررسی List Pattern ها
- کار کردن با List Pattern ها به همراه String ها و Span ها
- قابلیت های جدید در تبدیل کردن Method Group ها به Delegate
- کار کردن با Member های Required
- کار کردن با File-local Type ها
- کار کردن به Auto-default Struct ها







