سلام
اولين مورد در مورد propertyها دسته بندي اخلاقي اونهاست. كه بصورت زير انجام ميشه:
1- Read/write
مثل Age خودمون
2- Read only
مثل اين:
private string _Name = "default read only name";
public string Name
{
get
{
return _Name;
}
}
3- Write only
مثل اين:
private string _Name = "default write only name";
public string Name
{
set
{
_Name = value;
}
}
واضحه كه ما معمولا از نوع سوم استفاده نمي كنيم.
توي C# 3.0 يه نوع property ديگه هم است كه در واقع با نوع اول از نظر كاركرد هيچ فرقي نمي كنه. و اون Automatically Implemented Property هست:
public int Age
{
get;
set;
}
مزيت اين نوع property بر نوع اول اينه كه نيازي به private field نداره. (نكته: گاهي به private field عبارت backing field هم اتلاق ميشه.) البته ناگفته نمونه كه backing field توسط CLR تدارك ديده مي شه و در دامنه دسترسي ما نيست.
در NET 2.0 يه چيزه جالب اضافه شد كه من شخصا حس كردم يه قدم ديگه به (nature oriented) –من درآوردي بود- نزديكتر شديم. افزودن class modifier به get و set. مثال:
public int Age
{
get;
private set;
}
اينطوري بكل نياز ما به backing field مرتفع ميشه. فقط بايد يادمون باشه كه #C به استفاده نامعقول گير ميده. مثلا
private int Age
{
get;
public set;
}
اين error رو ميده:
Error 1 The accessibility modifier of the 'ConsoleApplication236.Program.Age.set' accessor must be more restrictive than the property or indexer 'ConsoleApplication236.Program.Age' F:\Programming\Temp\ConsoleApplication236\ConsoleA pplication32\Program.cs 13 20 ConsoleApplication236
راست ميگه خب معني نداره يه property كه از بيرون بهش access نيست متد setش public باشه.
تا بعد