عبارت foreach در زبان #C، امکان پیمایش اعضای یک مجموعه را میسر میکند؛ اما نه هر مجموعهای. این مجموعهی خاص باید به این صورت تعریف شده باشد: الف) <IEnumerable<T را پیاده سازی کرده باشد. ب) و یا ... مهم نیست که این مجموعه حتما <IEnumerable<T را پیاده سازی کرده باشد. اگر این مجموعه به همراه یک متد عمومی خاص با نام GetEnumerator باشد که خروجی آن دارای خاصیت عمومی T Current است (یکی از اعضای اینترفیس <IEnumerable<T ...
C# 9.0 به همراه دو بهبود جزئی دربارهی کار با Lambdas است:
- امکان عدم ذکر بعضی از پارامترهای Lambdas
- امکان تعریف متدهای static anonymous امکان عدم ذکر بعضی از پارامترهای Lambdas در C# 9.0
مثال زیر را در نظر بگیرید: Action<object, EventArgs> handler1 = (object obj, EventArgs args) => ShowDialog();
در عبارت lambda تعریف شده، از پارامترهای obj و args استفاده نشدهاست. به همین جهت برای ...
C# 9.0 به همراه قابلیت جدیدی است به نام «module initializer» که در اصل متدی است که در زمان بارگذاری اولیهی یک اسمبلی، به صورت خودکار اجرا میشود. عملکرد آن شبیه به سازندههای static کلاسها است؛ اما بجای اعمال به یک کلاس، اینبار به کل اسمبلی اعمال میشود. این قابلیت از روزهای ابتدایی طراحی CLR وجود خارجی داشته، اما در C# 9.0، امکان استفادهی عمومی از آن فراهم شدهاست.
روش تعریف یک module initializer
در مثال زی ...
در زبان #C، زمانیکه از کلاسی ارثبری میشود، امکان بازنویسی متدهای کلاس پایه، در صورت معرفی آنها به صورت virtual و یا abstract، وجود دارد؛ اما در این بازنویسیها، تغییر نوع خروجی این متدها مجاز نیست. این محدودیت در C# 9.0 با معرفی Covariant returns برداشته شدهاست؛ با یک شرط: نوع جدید این خروجی، باید covariant نوع اصلی متدی باشد که از کلاس پایهی آن ارثبری شدهاست.
وضعیت خروجی متدهای بازنویسی شده تا پیش از C# 9.0
...
یکی از ویژگیهای زبان VB، شباهت بیش از اندازهی آن به زبان انگلیسی است. برای مثال در این زبان با استفاده از not و and: If Not a And b Then
...
Else
...
EndIf
میتوان ifهای خواناتری را نسبت به #C ایجاد کرد: if(!(a) && b)
{
...
}
else
{
}
در ادامه خواهیم دید که چگونه C# 9.0، این آرزوی دیرین را برآورده میکند! البته مایکروسافت در جای دیگری هم عنوان کردهاست که زبان VB را دیگر پیگیری نمیکند ...
در مطلب معرفی خواص init-only ، با روش معرفی خواص immutable آشنا شدیم. نوع جدیدی که به C# 9.0 به نام record اضافه شدهاست، قسمتی از آن بر اساس همان خواص init-only کار میکند. به همین جهت مطالعهی آن مطلب، پیش از ادامهی بحث جاری، ضروری است.
چرا در C# 9.0 تا این اندازه بر روی سادگی ایجاد اشیاء Immutable تمرکز شدهاست؟
به شیءای Immutable گفته میشود که پس از وهله سازی ابتدایی آن، وضعیت آن دیگر قابل تغییر نباشد. همچنی ...
اگر به قالب ابتدایی یک برنامهی کنسول #C دقت کنیم، همواره به ساختار استاندارد زیر میرسیم: using System;
namespace CS9Features
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
در اینجا یک سری import، به همراه تعریف فضای نام، تعریف کلاس و تعریف متد Main وجود دارند ... تا بتوان یک سطر Hello World را در کنسول ...
ویژگی جدید مورد بحث در این قسمت، «Improved Target Typing» نام دارد. اما «Target Typing» چیست؟ حدس زدن نوع یک شیء بر اساس زمینهای که توسط آن تعریف شدهاست، Target Typing نامیده میشود. نمونهای از آنرا سالهاست که با استفاده از واژهی کلیدی var در #C استفاده میکنید. اما قابلیتی که در C# 9.0 اضافه شدهاست، تقریبا معکوس آن است.
Target Typing در C# 9.0
مشکلی که بعضیها با واژهی کلیدی var دارند، این است که اندکی خوا ...
ویژگیهای جدید C# 9.0، به همراه NET 5. ارائه میشوند. بنابراین جهت راه اندازی پروژهای که قرار است بر این مبنا تهیه شود، نیاز است مراحل زیر را طی کنید:
- آخرین نگارش NET 5 SDK. را از اینجا دریافت و نصب کنید (حتما SDK باشد و نه runtime).
- اگر میخواهید با ویژوال استودیو کار کنید، نیاز است حداقل نگارش 16.7 یا بالاتر را نصب کرده باشید. به همین جهت پیش از ادامهی بحث، از منوی Help، گزینهی Check For Updates را انتخاب کرد ...