C# – ویژگیها (Properties)
ویژگیها و کپسولهسازی (Encapsulation)
قبل از اینکه به توضیح ویژگیها بپردازیم، باید درک پایهای از مفهوم کپسولهسازی داشته باشید.
کپسولهسازی به این معنی است که مطمئن شوید دادههای “حساس” از کاربران پنهان شده است. برای دستیابی به این هدف باید:
- فیلدها/متغیرها را به صورت
private
تعریف کنید. - از طریق ویژگیها، متدهای عمومی
get
وset
را فراهم کنید تا بتوانید به فیلدهای خصوصی دسترسی داشته و آنها را بهروز کنید.
ویژگیها (Properties)
شما از فصل قبلی یاد گرفتید که متغیرهای خصوصی فقط در داخل همان کلاس قابل دسترسی هستند (یک کلاس خارجی به آنها دسترسی ندارد). اما گاهی اوقات ما نیاز داریم که به آنها دسترسی داشته باشیم و این کار از طریق ویژگیها امکانپذیر است.
ویژگی در واقع ترکیبی از یک متغیر و یک متد است و شامل دو متد get
و set
میباشد:
مثال:
class Person
{
private string name; // فیلد
public string Name // ویژگی
{
get { return name; } // متد get
set { name = value; } // متد set
}
}
توضیح مثال:
ویژگی Name
با فیلد name
مرتبط است. یک روش خوب این است که از همان نام برای هر دو استفاده کنید، اما حرف اول ویژگی با حرف بزرگ باشد.
- متد
get
مقدار فیلدname
را بازمیگرداند. - متد
set
مقداری به فیلدname
اختصاص میدهد. کلمه کلیدیvalue
نمایانگر مقداری است که ما به ویژگی اختصاص میدهیم.
استفاده از ویژگیها برای دسترسی به فیلدهای خصوصی:
اکنون میتوانیم از ویژگی Name
برای دسترسی و بهروزرسانی فیلد خصوصی کلاس Person
استفاده کنیم:
class Person
{
private string name; // فیلد
public string Name // ویژگی
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
خروجی:
Liam
ویژگیهای خودکار (Automatic Properties)
C# همچنین امکان استفاده از ویژگیهای خودکار (به صورت خلاصه) را فراهم میکند، جایی که نیازی به تعریف فیلد برای ویژگی نیست و فقط کافی است get;
و set;
را داخل ویژگی بنویسید.
مثال زیر همان نتیجه مثال قبلی را تولید میکند، با این تفاوت که کد کمتری نیاز است:
class Person
{
public string Name // ویژگی
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
خروجی:
Liam
چرا کپسولهسازی؟
- کنترل بهتر اعضای کلاس: این موضوع احتمال ایجاد خطا در کد را کاهش میدهد.
- ایجاد فیلدهای فقط خواندنی یا فقط نوشتنی: میتوان از متد
get
فقط برای خواندن و از متدset
فقط برای نوشتن استفاده کرد. - انعطافپذیری: برنامهنویس میتواند یک بخش از کد را تغییر دهد بدون اینکه بر بخشهای دیگر تأثیر بگذارد.
- افزایش امنیت دادهها: دادهها از دسترسیهای ناخواسته محافظت میشوند.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام