در C# 7.2 میتوان با value types (مانند structs) همانند reference types (مانند کلاسها) رفتار کرد. جائیکه کارآیی برنامه بسیار حائز اهمیت باشد (مانند بازیها)، استفاده از structs و value types بسیار مرسوم است؛ از این جهت که این نوعها بر روی heap تخصیص داده نمیشوند. اما مشکل آنها این است که زمانیکه به متدها ارسال میشوند، مقدار آنها ارسال خواهد شد و برای این منظور نیاز به ایجاد یک کپی جدید از آنها میباشد. برای رفع این مشکل و کاهش سربار ...
C# 7.2 به همراه تعداد کوچکی از بهبودهای کامپایلر است و با Visual Studio 2017 نگارش 15.5 ارائه شده و روش فعالسازی آن با نگارش 7.1 آن یکی است (انتخاب گزینهی « C# latest minor version (latest) » در تنظیمات پیشرفتهی Build خواص پروژه). همچنین اگر از VSCode استفاده میکنید، نگارش 1.14 افزونهی #C آن، پشتیبانی کاملی را از C# 7.2 به همراه دارد؛ در اینجا، افزودن خاصیت <LangVersion>latest</LangVersion> به فایل csproj برنامه برای استفاد ...
در مطلب « C# 7 - Tuple return types and deconstruction » با نوعهای جدید بازگشتی Tuple در C# 7.0 آشنا شدیم. در C# 7.1 تشخیص نام اعضای Tuple تعریف شده بهبود یافته و از این لحاظ شبیه به anonymous types شدهاست. مفهوم «Name Inference» یا «حدس زدن نامها» را با یک مثال بهتر میتوان توضیح داد. string name = "User 1";
int age = 20;
var personTuple = (name, age);
Console.WriteLine(personTuple.Item1); // User 1
Console.WriteLine(person ...
Literal چیزی است مانند null و در حقیقت یک واژهی کلیدیاست که دارای مقداری مشخص میباشد. واژه کلیدی default نیز مفهوم مشابهی را به همراه دارد. تا پیش از C# 7.1 برای دسترسی به مقدار پیشفرض value types به صورت ذیل عمل میشد: int a = default(int);
در اینجا مقدار پیشفرض نوعی که بین پرانتزها ذکر میشود، بازگشت داده خواهد شد. اگر int ذکر شود، صفر و اگر bool ذکر شود، مقدار fa ...
پس از فعالسازی C# 7.1 ، اولین ویژگی جدید C# 7.1، متدهای Main برنامههای کنسول (و همچنین WPF و WinForms) هستند که اینبار قابلیت تعریف async را نیز دارند.
نحوهی کار با متدهای async، در متدهای Main نگارشهای پیش از C# 7.1
برای کار با متدهای Async نیاز است از واژهی کلیدی await استفاده شود و با قید این واژه، ضروری است واژهی کلیدی async نیز به امضای متد دربرگیرندهی عملیات اضافه گردد؛ اما در نگارشهای پیشین زبان #C ...
C# 7.1 به همراه به روز رسانی سوم VS 2017 ارائه شدهاست و اگر در ابتدای کار سعی کنید برای مثال یکی از ویژگیهای جدید C# 7.1، مانند static async Task Main را توسط آن آزمایش کنید، خطای کامپایل برنامه را دریافت میکنید. علت اینجا است که این نگارش خاص حتما نیاز به تنظیمات ویژهای را جهت فعالسازی دارد.
فعالسازی کامپایلر C# 7.1 در VS 2017
ابتدا مسیر Visual Studio -> Build tab -> Advanced را طی کنید:
...
در تکمیل سری بررسی ویژگیهای C# 7.0 ، ذکر ویژگی Discards نیز ضروری است. Discards به معنای متغیرهای محلی هستند که قابل انتساب بوده، اما قابل خواندن نیستند. دارای نامی نیستند و تنها توسط یک _ مشخص میشوند. در اینجا underscore یا _، یک واژهی کلیدی است؛ مانند var و قابلیت خوانده شدن را ندارد (نمیتواند در سمت راست یک انتساب قرار گیرد).
علت وجود Discards در C# 7.0
گاهی از اوقات میخواهیم از مقادیر بازگشت داده شدهی تو ...
توابع محلی، امکان تعریف یک تابع را درون یک متد، فراهم میکنند. هدف آنها تدارک توابعی کمکی است که به سایر قسمتهای کلاس مرتبط نمیشوند. برای مثال اگر متدی نیاز به کار با یک private method دیگر را دارد و این متد خصوصی در جای دیگری استفاده نمیشود، میتوان جهت بالابردن خوانایی برنامه و سهولت یافتن متد مرتبط، این متد خصوصی را تبدیل به یک تابع محلی، درون همان متد کرد. static void Main(string[] args)
{
int Add(int a, int b)
{
...
در طراحی زبان #C، واژهی کلیدی throw همیشه یک statement بودهاست و نه یک expression. برای مثال از آن نمیتوان در قطعه کدهای شرطی و عبارات lambda استفاده کرد. برای رفع این محدودیت، در C# 7 کار معرفی «throw expressions» صورت گرفتهاست.
throw expressions در C# 7
روش تعریف throw expressions همانند روش متداول تعریف آنها است و از این لحاظ تغییری صورت نگرفتهاست. تنها تغییر انجام شده، امکان استفادهی از آن در مح ...
binary literals و digit separators دو ویژگی جدید در سیشارپ 7 هستند که باعث افزایش خوانایی کدها خواهند شد. Binary Literals از همان نسخههای اولیه سیشارپ قابلیت تعریف مقادیر عددی در مبنای 10 و 16 موجود بوده و تا قبل از سیشارپ 7 روش رایج برای تعریف مقادیر هگزادسیمال استفاده از enum بوده است: [Flags]
public enum Option
{
None = 0x00,
Option1 = 0x01,
Option2 = 0x02,
Option3 = 0x04,
Option4 = 0x08,
Opt ...