Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Механізми зміни доступу до полів. Методи-властивості

Читайте также:
  1. Визначення захисних валютних застережень проти ризику валютних втрат у разі зміни курсу валют
  2. Виконавчі механізми системи автоматики
  3. Гальмові механізми
  4. Загальні відомості про вивчаємі вузли і механізми
  5. Загальні відомості про вивчаємі механізми і вузли
  6. Загальні відомості про кривошипно-шатунний і газорозподільний механізми ДВЗ.
  7. Зміни з боку органів та систем при гарячці.

Методи, називані властивостями (Propertіes), представляють спеціальну синтаксичну конструкцію, призначену для забезпечення ефективної роботи з властивостями. Правильною стратегією є закриття полів від клієнта – поля з'являються з модифікатором protected або prіvate. Клієнти класу не повинні використовувати інформацію про те, як улаштовані поля. Це полегшує можливу модифікацію класу в майбутньому. Клас зможе змінити представлення даних, зберігши інтерфейс, наданий клієнтам. У цьому випадку зміни в полях не відіб'ються на клієнтах.

Закриття полів не означає, що клієнти класу не можуть працювати з даними, що зберігаються в полях класу. Можливі різні стратегії доступу клієнта до закритих полів класу: п'ять найбільш уживаних стратегій:

-читання, запис (Read, Wrіte);

-читання, запис при першому звертанні (Read, Wrіte-once);

-тільки читання (Read-only);

-тільки запис (Wrіte-only);

-ні читання, ні запису (Not Read, Not Wrіte).

Забезпечуючи інкапсуляцію, все-таки таки необхідно мати можливість використовувати значення полів класу, для цього можна застосувати механізм використання методів-властивостей. Розглянемо загальний синтаксис методів-властивостей. Нехай name - це закрита властивість. Тоді для неї можна визначити відкритий метод-властивість (функцію), що повертає той же тип, що і поле name. Ім'я методу зазвичай близько до імені поля, відрізняючися від нього, наприклад, тільки заголовною буквою (Name). Тіло властивості містить два методи - get і set, один із яких може бути опущений. Метод get повертає значення закритого поля, метод set установлює значення, використовуючи значення, передане йому в момент виклику і збережене в службовій перемінній зі стандартним ім'ям value. Оскільки get і set - це звичайні процедури мови, програмно можна реалізувати як завгодно складні стратегії доступу.

Практичний приклад створення методів-властивостей:

Розглянемо клас Person, у якого п'ять полів: fam, status, salary, age, health, що характеризують, відповідно, прізвище, статус, зарплату, вік і здоров'я персони. Усі поля закриті для клієнта, так що клієнт не може безпосередньо читати або записувати дані в поля класу. Для кожного з цих полів може бути створено своя стратегія доступу. При проектуванні класу будемо припускати, що вік доступний для читання і запису, прізвище можна задати тільки один раз, статус можна тільки читати, зарплата недоступна для читання, а здоров'я закрите для доступу і тільки спеціальні методи класу можуть повідомляти деяку інформацію про здоров'я персони. От як на C# можна забезпечити ці стратегії доступу до закритих полів класу (Лістинг 4.1):

Лістинг 4.1:

public class Person

{

public enum Status

{ ребенок, школьник, студент, работник, пенсионер

}

//поля (все закрыты)

string fam = "", health = "";

int age = 0, salary = 0;

Status status = Status.работник;

//методы - свойства

/// <summary>

///стратегия: Read,Write-once (Чтение, запись при первом обращении)

/// </summary>

public string Fam

{

set { if (fam == "") fam = value; }

get { return (fam); }

}

/// <summary>

///стратегия: Read-only(Только чтение)

/// </summary>

public Status GetStatus

{

get { return (status); }

}

/// <summary>

///стратегия: Read,Write (Чтение, запись)

/// </summary>

public int Age

{

set

{

age = value;

//Изменение статуса

if (age < 7) status = Status.ребенок;

else if (age < 17) status = Status.школьник;

else if (age < 22) status = Status.студент;

else if (age < 65) status = Status.работник;

else status = Status.пенсионер;

}

get { return (age); }

}

/// <summary>

///стратегия: Write-only (Только запись)

/// </summary>

public int Salary

{

set { salary = value; }

}

}

 


Дата добавления: 2015-08-18; просмотров: 122 | Нарушение авторских прав


Читайте в этой же книге: Развитие нравственного сознания в дошкольном детстве | Эмоциональное развитие дошкольника | Проблема готовности к обучению в школе. | Диагностика школьной зрелости. | Опишіть послідовність етапів і процедур дослідження цін. | Опишіть послідовність етапів і процедур дослідження ринку упаковки. | На основі даних про результати маркетингових досліджень охарактеризуйте вибірку: визначте одиницю вибірки, обсяг вибірки і структуру вибірки. | Лабораторна робота 1. Повторення принципів ООП. Зв’язки між класами. | Створення батьківського класу Found | Добавление и скрытие полей потомком |
<== предыдущая страница | следующая страница ==>
Класи. Ролі класу| Доступ до методів

mybiblioteka.su - 2015-2024 год. (0.013 сек.)