НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Мова програмування C#. Уроки W3Schools українською для початківців

En Es De

C# Властивості (Get та Set)


Властивості та інкапсуляція

Перш ніж ми почнемо пояснювати властивості, ви повинні мати базове уявлення про "Інкапсуляцію".

Значення інкапсуляції полягає в тому, щоб переконатися, що «конфіденційні» дані приховані від користувачів. Щоб досягти цього, ви повинні:

  • оголосити поля/змінні як private
  • надати public методи get та set через властивості, щоб отримати доступ і оновити значення поля private

Властивості

З попереднього розділу ви дізналися, що до private змінних можна отримати доступ лише в межах одного класу (зовнішній клас не має до нього доступу). Однак іноді нам потрібно отримати до них доступ — і це можна зробити за допомогою властивостей.

Властивість схожа на комбінацію змінної та методу, і вона має два методи: get та set:

Приклад

class Person
{
  private string name; // поле

  public string Name   // властивість
  {
    get { return name; }   // get метод
    set { name = value; }  // set метод
  }
}

Пояснення прикладу

Властивість Name пов’язана з полем name. Рекомендується використовувати однакові назви як для властивості, так і для приватного поля, але з великою першою літерою.

Метод get повертає значення змінної name.

Метод set призначає value змінній name. Ключове слово value представляє значення, яке ми призначаємо властивості.

Якщо ви не зовсім розумієте це, подивіться на приклад нижче.

Тепер ми можемо використовувати властивість Name для доступу та оновлення поля private класу 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

Спробуйте самі »


Автоматичні властивості (скорочення)

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)
  • Гнучкий: програміст може змінити одну частину коду, не впливаючи на інші частини
  • Підвищена безпека даних