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 فقط برای نوشتن استفاده کرد.
  • انعطاف‌پذیری: برنامه‌نویس می‌تواند یک بخش از کد را تغییر دهد بدون اینکه بر بخش‌های دیگر تأثیر بگذارد.
  • افزایش امنیت داده‌ها: داده‌ها از دسترسی‌های ناخواسته محافظت می‌شوند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.