Главная
Обратная связь
Дисциплины:
Архитектура (936) Биология (6393) География (744) История (25) Компьютеры (1497) Кулинария (2184) Культура (3938) Литература (5778) Математика (5918) Медицина (9278) Механика (2776) Образование (13883) Политика (26404) Правоведение (321) Психология (56518) Религия (1833) Социология (23400) Спорт (2350) Строительство (17942) Технология (5741) Транспорт (14634) Физика (1043) Философия (440) Финансы (17336) Химия (4931) Экология (6055) Экономика (9200) Электроника (7621)
|
Класи. Опис класу. Специфікація класу. Об’єкти класів
Клас являє собою шаблон, за яким визначається форма об'єкта. У ньому вказуються дані і код, який буде оперувати цими даними. У C # використовується специфікація класу для побудови об'єктів, які є екземплярами класу. Отже, клас, по суті, являє собою ряд схематичних описів способу побудови об'єкта. При цьому дуже важливо підкреслити, що клас є логічною абстракцією. Фізичне уявлення класу з'явиться в оперативній пам'яті лише після того, як буде створено об'єкт цього класу. Класи та структури - це, по суті, шаблони, за якими можна створювати об'єкти. Кожен об'єкт містить дані і методи, що маніпулюють цими даними. Загальна форма визначення класу При визначенні класу оголошуються дані, які він містить, а також код, який оперує цими даними. Якщо найпростіші класи можуть містити тільки код або тільки дані, то більшість справжніх класів містить і те й інше. Дані-члени Дані-члени - це ті члени, які містять дані класу - поля, константи, події. Дані-члени можуть бути статичними (static). Член класу є членом примірника, якщо тільки він не оголошений явно як static. Давайте розглянемо види цих даних: Поля (field) Це будь-які змінні, асоційовані з класом. константи Константи можуть бути асоційовані з класом тим же способом, що і змінні. Константа оголошується за допомогою ключового слова const. Якщо вона оголошена як public, то в цьому випадку стає доступною ззовні класу. події Це члени класу, що дозволяють об'єкту повідомляти викликає код про те, що трапилося щось гідне згадки, наприклад, зміна властивості класу або деяке взаємодію з користувачем. Клієнт може мати код, відомий як обробник подій, що реагує на них. Функції-члени Функції-члени - це члени, які забезпечують деяку функціональність для маніпулювання даними класу. Вони включають методи, властивості, конструктори, фіналізатор, операції і індексатори: Методи (method) Це функції, асоційовані з певним класом. Як і дані-члени, за замовчуванням вони є членами екземпляра. Вони можуть бути оголошені статичними за допомогою модифікатора static. Властивості (property) Це набори функцій, які можуть бути доступні клієнту таким же способом, як загальнодоступні поля класу. У C # передбачений спеціальний синтаксис для реалізації читання і запису властивостей для класів, тому писати власні методи, що починаються на Set і Get, не знадобиться. Оскільки не існує якогось окремого синтаксису для властивостей, який відрізняв би їх від нормальних функцій, створюється ілюзія об'єктів як реальних сутностей, що надаються клієнтського коду. Конструктори (constructor) Це спеціальні функції, що викликаються автоматично при ініціалізації об'єкта. Їх імена збігаються з іменами класів, яким вони належать, і вони не мають типу повернення. Конструктори корисні для ініціалізації полів класу. Фіналізатор (finalizer) Викликаються, коли середовище CLR визначає, що об'єкт більше не потрібен. Вони мають те ж ім'я, що і клас, але з попереднім символом тильди. Передбачити точно, коли буде викликаний фіналізатор, неможливо. Операції (operator) Це найпростіші дії начебто + або -. Коли ви складаєте два цілих числа, то, строго кажучи, застосовуєте операцію + до цілих. Однак C # дозволяє вказати, як існуючі операції будуть працювати з одними класами (так звана перевантаження операції). Індексатори (indexer) Дозволяють індексувати об'єкти таким же способом, як масив або колекцію. Клас створюється за допомогою ключового слова class. Нижче наведена загальна форма визначення простого класу, що містить тільки змінні екземпляра і методи: class ім'я_класу { // Оголошення змінних екземпляра. доступ тип переменная1; доступ тип переменная2; // ... доступ тип переменнаяN; // Оголошення методів. доступ возращаемий_тіп метод1 (параметри) { // Тіло методу } доступ возращаемий_тіп метод2 (параметри) { // Тіло методу } //. . . доступ возращаемий_тіп методN (параметри) { // Тіло методу }} Зверніть увагу на те, що перед кожним оголошенням змінної і методу вказується доступ. Це специфікатор доступу, наприклад public, що визначає порядок доступу до даного члену класу. Члени класу можуть бути як закритими (private) в межах класу, так відкритими (public), тобто більш доступними. Специфікатор доступу визначає тип дозволеного доступу. Вказувати специфікатор доступу не обов'язково, але якщо він відсутній, то і оголошений член вважається закритим в межах класу. Члени із закритим доступом можуть використовуватися тільки іншими членами їх класу.
Для оголошення об'єкта довільного типу використовується наступна конструкція: <тип класу> ім'я змінної = new <тип класу> (); наприклад: InfoUser myinfo = new InfoUser (); Цей рядок оголошення виконує три функції. По-перше, оголошується змінна myinfo, що відноситься до типу класу InfoUser. Сама ця змінна не є об'єктом, а лише змінної, яка може посилатися на об'єкт. По-друге, створюється конкретна, фізична, копія об'єкта. Це робиться за допомогою оператора new. І нарешті, змінної myinfo присвоюється посилання на даний об'єкт. Таким чином, після виконання аналізованої рядки оголошена змінна myinfo посилається на об'єкт типу InfoUser. Оператор new динамічно (тобто під час виконання) розподіляє пам'ять для об'єкта і повертає посилання на нього, яка потім зберігається в змінної. Отже, в C # для об'єктів всіх класів повинна бути динамічно розподілена пам'ять. Та обставина, що об'єкти класів доступні за посиланням, пояснює, чому класи називаються посилальними типами. Головна відмінність типів значень від посилальних типів полягає в тому, що саме містить змінна кожного з цих типів. Так, змінна типу значення містить конкретне значення, а посилальна змінна містить не сам об'єкт, а лише посилання на нього.
|