field اضافه شده. کاربردش برای وقتی هست که توی Property میخوایم فقط یکی از set یا get رو تعریف کنیم. قبل از این فیچر، وقتی میخواستیم که get و set رو با بدنه تعریف کنیم باید حتما یه فیلد با دسترسی private تعریف میکردیم که به اصطلاح بهش میگفتیم Backing Field:class Person
{
private string _name; // Backing Field
public string Name {
get => _name;
set => _name = value;
}
}
کمی بعد تر در تاریخ سی شارپ، اومدن Auto Implemented Property ها رو اضافه کردن که ما خیلی ازش استفاده میکنیم:
class Person
{
public string Name { get; set; }
}
در اصل خود کامپایلر این کد رو به کد قبلی تبدیل میکنه و برای ما get و set رو به همراه یه backing field میسازه. تا قبل از سی شارپ 14، ما دسترسی به backing field که کامپایلر بصورت اتوماتیک میساخت نداشتیم و اگر میخواستیم که فقط یکی از get یا set رو پیاده سازی کنیم مجبور بودیم تا backing field رو هم اضافه کنیم.
اما الان با استفاده از کلمه field میتونیم دقیقا همینکار رو انجام بدیم:
class Person
{
public string Name {
get;
set => field = string.IsNullOrEmpty(value) ? "Not Defined" : value;
}
}
بنظرم ازون دسته فیچرهایی هست که خیلی زود بهش عادت میکنیم و بعدش توهم میزنیم که از روز اول توی زبان بوده 😂
این یکی از نکات جذاب سی شارپه بنظرم، خیلی از فیچرهایی که توی سال های اخیر اضافه شدن صرفا برای راحت تر کردن و خوانا تر کردن کد بودن، درحالیکه شاید تنها کاری که کردن این بوده که کد تکراری و boiler-plate رو توی کامپایلر اتوماسیون کردن.
@ever_code