Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

Реклама в мережі  

   

Статистика  

Користувачі
1
Статті
184
Перегляди статей
728185
   

Пошук по сайту  

   

Ми знаходимось тут  

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Посібник по C#  

 Вивчаємо сучасну мову  програмування C# 7.0

ПРОГРАМУЄМО в VISUAL STUDIO 2017

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 1000 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Відеокурс по С++  

   

Рекомендуємо:  

   

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

Властивість в Сі-шарп - це член класу, який надає зручний механізм доступу до поля класу (читання поля і запис). Властивість являє собою щось середнє між полем і методом класу. При використанні властивості, ми звертаємося до нього, як до поля класу, але насправді компілятор перетворює це звернення до виклику відповідного неявного методу. Такий метод називається аксесор (accessor). Існує два таких методи: get (для отримання даних) і set (для запису). Оголошення простої властивості має наступну структуру:

[модифікатор доступу] [тип] [імя_властивості]

{

   get

   {

     // Тіло аксессор для читання з поля

   }

  set

   {

     // Тіло аксесора для запису в полі

   }

}

Наведу приклад використання властивостей. Маємо клас Студент, і в ньому є закрите поле курс, яке не може бути менше за одиницю і більше п'яти. Для управління доступом до цього полю буде використано властивість Year:

 

class Student

{

   private int year; // оголошення закритого поля

    public int Year // оголошення властивості

   {

     get // аксессор читання поля

     {

       return year;

     }

     set // аксессор запису в полі

     {

       if (value <1)

         year = 1;

       else if (value> 5)

         year = 5;

       else year = value;

     }

   }

}

class Program

{

   static void Main (string [] args)

   {

     Student st1 = new Student ();

     st1.Year = 0; // Записуємо в поле, використовуючи аксесор set Console.WriteLine (st1.Year); // Читаємо поле, використовуючи аксесор get, виведе 1

     Console.ReadKey ();

   }

}

Простіше кажучи, у властивості реалізуються два методи. У тілі аксесор get може бути більш складна логіка доступу, але в підсумку повинно повертатися значення поля, або інше значення за допомогою оператора return. У аксесор set само присутній неявний параметр value, який містить значення, що привласнюється властивості (у прикладі вище, при записі, значення value одно «0»).

Навіщо це потрібно?

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

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

class Student

{

   private int year;

  public int GetYear ()

   {

     return year;

   }

   public void SetYear (int value)

   {

     if (value <1)

         year = 1;

     else if (value> 5)

         year = 5;

     else year = value;

   }

}

class Program

{

   static void Main (string [] args)

   {

     Student st1 = new Student ();

     st1.SetYear (0);

     Console.WriteLine (st1.GetYear ());

     Console.ReadKey ();

   }

}

Властивість також може надавати доступ тільки на читання поля або тільки на запис. Якщо, наприклад, нам необхідно закрити доступ на запис, ми просто не вказуємо аксесор set. Приклад:

class Student

{

   private int year;

   public Student (int y) // конструктор

   {

     year = y;

   }

   public int Year

   {

     get

     {

       return year;

     }

   }

}

class Program

{

   static void Main (string [] args)

   {

     Student st1 = new Student (2);

     Console.WriteLine (st1.Year); // Читання

     st1.Year = 5; // Помилка, властивість тільки на читання

     Console.ReadKey ();

   }

}

Варто пам'ятати, що саме властивість не визначає місце в пам'яті для зберігання поля, і, відповідно, необхідно окремо оголосити поле, доступом до якого буде управляти властивість.

Автоматичні властивості

Автоматична властивість - це дуже проста властивість, яка, на відміну від звичайної властивості, вже визначає місце в пам'яті (створює неявне поле), але при цьому не дозволяє створювати логіку доступу. Структура оголошення автоматичного властивості:

[модифікатор доступу] [тип] [імя_свойства] {get; set; }

У таких властивостей, у їх аксесор відсутнє тіло.

Приклад використання:

class Student

{

   public int Year {get; set; }

}

class Program

{

   static void Main (string [] args)

   {

     Student st1 = new Student ();

     st1.Year = 0;

     Console.WriteLine (st1.Year);

     Console.ReadKey ();

   }

}

Автоматично реалізовані властивості є сенс використовувати тоді, коли немає необхідності накладати будь-які обмеження на можливі значення неявного поля властивості.

І тут у вас може виникнути питання, а в чому тоді різниця між простими відкритими полями і автоматичними властивостями. У таких властивостей залишається можливість робити їх тільки на читання або тільки на запис. Для цього вже використовується модифікатор доступу private перед ім'ям аксесор:

 

public int Year {private get; set; } // Властивість тільки на запис

public int Year {get; private set; } // Властивість тільки на читання

 

Домашнє завдання

Створіть клас Телевізор, оголосіть в ньому поле гучність звуку, для доступу до цього полю реалізуйте властивість. Гучність може бути в діапазоні від 0 до 100.

PS. Не забудьте поділитися з друзями цією статтею за допомогою кнопок соціальних мереж.

Додати коментар

Захисний код
Оновити

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test

Онлайн тести  для програмістів: https://proghub.ru/


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt