tgoop.com/fullStackDevs/519
Last Update:
#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🔹اما استفاده از object initializer محدودتی هایی به همراه دارد، علی رغم دم دست بودن و راحتی که در مقایسه با Positional دارد اما در پشت صحنه مقادیر پراپرتی ها بعد از اتمام صدا زده شدن و اجرای متد سازنده کلاس، set میشوند و بدین ترتیب با استفاده از این سبک کد نویسی نمیتوانید یک immutable type تعریف کنید و بدین منظور باید از سبک قبلی (Positional Creation) استفاده کنید.
{
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" };
🔰 تمام آنچه که تاکنون گفته شد مقدمه ای بود برای بررسی علت معرفی 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
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/519