Web Devs
644 subscribers
218 photos
22 videos
17 files
233 links
Articles, News, Jokes, Quotes, Back-End and UI/UX for web developers.
Github : https://github.com/fullStackDevsGroup
Advertising: @adsfullStackDevs
Download Telegram
#CSharp9
#InitOnlyProperty
#NewFeature

🔰 اگر دنبال کننده خبرها باشید حتما میدانید که Microsift Build 2020 به تازگی به اتمام رسید است، که معرفی ویژگی های C# 9 از جمله چیزهای جدیدی بود که در این بیلد معرفی شد.

▫️ در اول لیست ویژگی های C# 9
❇️ Init-only properties
به
چشم میخوره و اما بیایید به ببینیم این ویژگی چی هست و اصلا چرا به سی شارپ اضافه شد

🔸قبلا از شروع بایستی با تعریف های زیر آشنایی داشته باشید
▪️ Immutable type :
یک Immutable type نوعی هست که پراپرتی های آن نوع، فقط در زمان ساخته شدن آن میتوانند مقدار دهی شوند و بعد از آن قابل تغییر نیستند.

▪️immutable property :
به طور ساده یک immutable property یک read-only property میباشد.

✳️ سی شارپ این اجازه را میدهد تا به صورت positional و nominal کد بنویسید.
برای استفاده از سینتکس positional از متد سازنده میتوان استفاده کرد و Object initializer هم از سینتکس های nominal میباشد.

🔹تاقبل از سی شارپ 9 استفاده از سینتکس nominal برای Initialize کردن ابجکت ها دارای محدودیتی بود که پراپرتی ها الزاما بایستی writable میبودند تا بتوان آنها را در هنگام ساختن آبجکت با استفاده از سینتکس nominal مقدار دهی کرد.

❇️ Positional Creation
🔸این
سبک کد نویسی یک سبک مرسوم و قدیمی میباشد که از ابتدای عمر C# مورد استفاده قرار میگرفته است که از متد سازنده برای initialize کردن پراپرتی های یک آبجکت استفاده میکنیم.
و در هنگام نمونه سازی از کلاس بایستی پارامتر های لازم را از طریق متد سازنده برای initialize کردن ابجکت پاس دهیم.
```
public class Person
{
public string FirstName { get; }
public string LastName { get; }

public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}

public class Racer : Person
{
public string RacingTeam { get; }

public Racer(string firstName, string lastName, string racingTeam)
: base(firstName, lastName)
{
RacingTeam = racingTeam;
}
}

Person p = new Racer("Charles", "Leclerc", "Ferrari");
```
❇️ Nominal Creation
🔸با استفاده از این سبک کدنویسی، کد کمتری مینویسید و به جای تعریف کردن متد سازنده از ویژگیه object initializer استفاده میکنید.

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

public class Racer : Person
{
public string RacingTeam { get; set; }
}

Person p = new Racer { FirstName = "Charles", LastName = "Leclerc", RacingTeam = "Ferrari" };

🔹اما استفاده از object initializer محدودتی هایی به همراه دارد، علی رغم دم دست بودن و راحتی که در مقایسه با Positional دارد اما در پشت صحنه مقادیر پراپرتی ها بعد از اتمام صدا زده شدن و اجرای متد سازنده کلاس، set میشوند و بدین ترتیب با استفاده از این سبک کد نویسی نمیتوانید یک immutable type تعریف کنید و بدین منظور باید از سبک قبلی (Positional Creation) استفاده کنید.

🔰 تمام آنچه که تاکنون گفته شد مقدمه ای بود برای بررسی علت معرفی Init-only property در سی شارپ 9 و اینکه چرا این نیاز در سی شارپ حس شد.
بدین ترتیب Init-only property ها معرفی شدند تا امکان مقدار دهی و تعریف immutable proprty ها immutable type ها را هنگام استفاده از object initilizer داشته باشیم .
🔸بدین منظور accessor جدیدی تحت عنوان init اضافه گردیده است که شکلی دیگر از accessor پیشین set میباشد.
در هنگام initilize کردن یک ابجکت با استفاده از object initializer، پراپرتی هایی که با این accessor تعریف شوند، هنگام اجرا شدن متد سازنده کلاس مقدار دهی میشوند و بعد از ساخته شدن آبجکت به صورت readonly خواهند بود و نمیتوان به آنها مقداری اختصاص داد.
❇️ Validation assigned value to init-only properties

🔸گاهی اوقات نیز الزامی است تا مقداری که به init-only property اختاصاص داده میشود، اعتبار سنجی شود.
نکته ای که وجود دارد این است که به صورت تک فیلد برای هر init-only property نمیتوانید اعتبار سنجی انجام دهید و بایستی به صورت یک بلاگ کد برای init-only property های خود اعتبارسنجی انجام دهید.

public class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }

init
{
if (FirstName.Length + LastName.Length > 52)
{
throw new Exception("...");
}
}
}

🔎 منبع
@FullStackDevs
#NET5
#CSharp9

.NET 5 = .NET Core vNext

🌀 معرفی نسخه نهایی NET 5.0

🔸 در این نسخه C# 9 وF# 5 با مجموعه گسترده ای از ویژگی های جدید و پیشرفت های جذاب به این نسخه اضافه شده اند.


🔹 این نسخه با هدف یکپارچه کردن محیط های مختلف توسعه نرم افزار در دات نت تهیه شده است تا گروه بسیاری از توسعه دهندگان را قادر به انتقال کد و برنامه های NET Framework خود به NET 5.0 باشند و همچنین کارهای اولیه در 5.0 انجام داده شده تا توسعه دهندگان Xamarin هنگام انتشار .NET 6.0 بتوانند از پلت فرم یکپارچه .NET استفاده کنند.

شما برای استفاده از .NET 5.0 در ویندوز و یا آخرین نسخه ویژوال استودیو برای Mac در macOS به Visual Studio 16.8 یا بالاتر نیاز دارید. C# extension برای Visual Studio Code از قبل .NET 5.0 و C # 9 را پشتیبانی می کند.

🔹 دات نت 5 دارای یک ماتریس پشتیبانی پلت فرم تقریباً یکسان با NET Core 3.1 ،برای ویندوز ،macOS ولینوکس است. مهمترین مورد برای NET 5.0 ویندوز Arm64 است.
💎 لینک مطلب ( معرفی دات نت 5 )

💎 لینک امکانات جدید در .NET 5


در ادامه بیشتر راجب امکانات جدید و این نسخه بحث خواهیم کرد.

@fullStackDevs
#cSharp9

اعمال واژه‌های کلیدی جدید and، or و not به سایر نوع‌ها نیز وجود دارند

🔹 تا اینجا مثال‌هایی را که بررسی کردیم، در مورد بررسی نوع اشیاء بود. اما می‌توان این واژه‌های کلیدی جدید در C# 9.0 را به هر نوع ممکنی نیز اعمال کرد. برای نمونه، مثال ساده‌ی زیر را که در مورد بررسی اعداد است، درنظر بگیرید:

var number = new Random().Next(1, 10);
if (number > 2 && number < 8)
{
// to do
}

✔️اکنون در C# 9.0 و با استفاده از امکانات جدید pattern matching آن می‌توان شرط متداول فوق را به صورت زیر ساده کرد:
if (number is > 2 and < 8)
{
// to do
}
در اینجا تنها یکبار نیاز به ذکر number است و از واژه‌های کلیدی is و and استفاده شده‌است.

🔸یک مثال دیگر: متد زیر را در نظربگیرید که با استفاده از && و || متداول #C نوشته شده‌است:

public static bool IsLetterOrSeparator(char c) =>
(c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '.' || c == ',';

✔️روش ارائه‌ی C# 9.0 ای آن به صورت زیر است:

public static bool IsLetterOrSeparator(char c) =>
c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';

@fullStackDevs