Складові елементи класу. Константні поля в класах. Ключові слова readonly, const
Зміст
- 1. Які складові елементи може включати клас у мові C#?
- 2. Які ключові слова можна використовувати при оголошенні полів (даних) класу?
- 3. Особливості застосування модифікатора const для полів класу. Загальна форма
- 4. Приклад застосування модифікатора const для поля класу
- 5. Особливості застосування модифікатора readonly для полів класу. Загальна форма
- 6. Приклад застосування модифікатора readonly в класі
- Зв’язані теми
Пошук на інших ресурсах:
1. Які складові елементи може включати клас у мові C#?
Клас може включати наступні складові елементи:
- поля або дані;
- конструктори;
- методи;
- перевантажені оператори;
- властивості;
- події;
- вкладені класи.
⇑
2. Які ключові слова можна використовувати при оголошенні полів (даних) класу?
При оголошенні полів можуть вказуватись наступні ключові слова:
- static. Це ключове слово використовується для оголошення статичного поля даних. Більш детально про використання статичних полів та методів описується тут;
- const – використовується для для оголошення постійного поля. Значення такого поля не можна змінювати;
- readonly – використовується для оголошення поля, яке призначене тільки для читання. Допускається встановлювати значення readonly-поля у конструкторі класу.
⇑
3. Особливості застосування модифікатора const для полів класу. Загальна форма
Модифікатор const визначає поле, яке не може змінюватись (постійне поле). Особливості використання поля в класі наступні:
- при оголошенні, поле з модифікатором const повинно бути обов’язково проініціалізовано деяким значенням;
- константні поля вважаються статичними, тому ззовні доступ до таких полів повинен бути як для статичних з використанням імені класу (а не імені екземпляру).
Загальна форма оголошення поля з модифікатором const має вигляд:
access_modifier const type const_name = value;
де
- access_modifier – один з п’яти модифікаторів доступу (private, protected, public, internal, protected internal);
- type – тип поля класу, який оголошується як константа;
- const_name – ім’я константи;
- value – значення константи, яке повинно бути сумісним з типом type.
⇑
4. Приклад застосування модифікатора const для поля класу
У прикладі оголошується клас CircleFigures, який реалізує методи для обчислення характеристик геометричних фігур, що будуються на основі кола.
Клас містить наступні елементи:
- загальнодоступну константу Pi, яка оголошена з ключовим словом const;
- метод Length(), який визначає довжину кола заданого радіусу;
- метод Area(), який визначає площу круга заданого радіусу;
- метод Volume(), який визначає об’єм сфери заданого радіусу.
У функції main() реалізовано створення екземпляру та виклик методів класу. Також продемонстровано доступ до константного поля Pi, яке неявно вважається статичним.
using System; using static System.Console; namespace ConsoleApp2 { // Клас, що реалізує обчислення площі різних фігур class CircleFigures { // константне поле - змінити в класі не можна public const double Pi = 3.141592; // неявно вважається статичним // метод, що обчислює довжину кола заданого радіусу public double Length(double radius) { // використовується внутрішня константа Pi return 2 * Pi * radius; } // метод, що обчислює площу круга заданого радіусу public double Area(double radius) { // використовується внутрішня константа Pi return Pi * radius * radius; } // метод, що обчислює об'єм кулі заданого радіусу public double Volume(double radius) { // використовується внутрішня константа Pi return 4.0 / 3 * Pi * radius * radius * radius; } } class Program { static void Main(string[] args) { // Використання констант в класах, ключове слово const // 1. Створити екземпляр класу Circle Figures CircleFigures cf = new CircleFigures(); // 2. Обчислити довжину кола радіусу 1 double length = cf.Length(1.0); // точність виведення - 2 знаки після коми WriteLine("length = {0:f2}", length); // 3. Обчислити площу круга радіусу 2 double area = cf.Area(2.0); WriteLine("area = {0:f2}", area); // 4. Обчислити об'єм кулі радіусу 3 double volume; volume = cf.Volume(3.0); WriteLine("volume = {0:f2}", volume); // 5. Звертання до константного поля Pi - використовується ім'я класу WriteLine("Pi = {0}", CircleFigures.Pi); } } }
Результат виконання програми
length = 6.28 area = 12.57 volume = 113.10 Pi = 3.141592
У вищенаведеному коді при спробі зміни значення константи Pi в методах класу, буде видано помилку на етапі компіляції
The left-hand side of an assignment must be a variable, property or indexer
⇑
5. Особливості застосування модифікатора readonly для полів класу. Загальна форма
Поле може бути оголошене з модифікатором readonly. Значення такого поля може бути ініціалізоване одним з двох способів:
- в конструкторі класу;
- одразу при оголошенні.
Загальна форма оголошення поля з модифікатором readonly наступна:
access_modifier readonly type var_name = value;
де
- access_modifier – один з п’яти модифікаторів доступу (private, protected, public, internal, protected internal);
- type – тип оголошуваного поля класу;
- var_name – ім’я поля;
- value – значення, яким ініціалізується поле. Значення може бути присвоєне тільки один раз. Значення value повинно бути сумісним з типом type.
⇑
6. Приклад застосування модифікатора readonly в класі
У прикладі демонструється застосування модифікатора readonly в класі, що реалізує масив фіксованого розміру.
Оголошується клас MyArrayFixed у якому реалізовані:
- внутрішня цілочисельна змінна Count, яка оголошена з модифікатором readonly. Ця змінна визначає кількість елементів у масиві, яка є фіксованою. Значення цієї змінної встановлюється за замовчуванням рівним 5. У будь-якому конструкторі класу можна змінити це значення тільки один раз. В інших методах класу змінити значення змінної Count неможливо;
- внутрішня змінна DefaultValue типу double, яка оголошена з модифікатором readonly. Змінна визначає значення елементів масиву, що присвоюються йому за замовчуванням. Правила використання цієї змінної такі самі як і для змінної Count;
- конструктор MyArrayFixed() з двома параметрами. Це конструктор один раз формує значення readonly-полів класу. Також у конструкторі виділяється пам’ять для масиву Array та значення елементів встановлюється рівним DefaultValue;
- конструктор MyArrayFixed() з одним параметром. Цей конструктор перенаправляється на інший конструктор з двома параметрами;
- демонстраційний метод SetDefaultValue(), в якому закоментована спроба змінити значення readonly-поля DefaultValue. Якщо зняти коментар у рядку то компілятор видасть помилку.
Текст прикладу для додатку типу Console Application наступний:
using System; using static System.Console; namespace ConsoleApp2 { // Клас, що реалізує масив, в якому к-сть елементів визначається заданим діапазоном class MyArrayFixed { // оголошення полів з модифікатором readonly public readonly int Count = 5; // Поточна к-сть елементів у масиві рівна 5 public readonly double DefaultValue; // значення елементів масиву за замовчуванням public double[] Array = null; // Ініціалізація полів у конструкторі класу - тільки один раз public MyArrayFixed(int _Count, double _DefaultValue) { // 1. Ініціалізувати readonly-поля класу // У масиві має бути не менше 5 елементів if (_Count > Count) Count = _Count; // можна декілька разів ініціалізувати readonly-поля але тільки в конструкторі DefaultValue = 0.0; DefaultValue = _DefaultValue; // 2. Виділити пам'ять для масиву Array = new double[Count]; // 3. Заповнити масив значеннями DefaultValue for (int i = 0; i < Array.Length; i++) Array[i] = DefaultValue; } // Конструктор з 1 параметром public MyArrayFixed(int _Count) : this(_Count, 0.0) { } // Встановити значення повторно в методах класу не можна void SetDefaultValue() { // DefaultValue = 2.5; - помилка компіляції } } class Program { static void Main(string[] args) { // Використання readonly-полів у класах // 1. Створити об'єкт класу MyArrayFixed MyArrayFixed af = new MyArrayFixed(7, 3.5); // у конструкторі виконується вся робота // 2. Вивести масив на екран та його readonly-поля WriteLine("Array af."); WriteLine($"af.Count = {af.Count}"); WriteLine("af.DefaultValue = {0}", af.DefaultValue); WriteLine("Items of array:"); for (int i = 0; i < af.Array.Length; i++) { Write("{0}\t", af.Array[i]); } WriteLine(); } } }
Результат роботи програми:
Array af. af.Count = 7 af.DefaultValue = 3.5 Items of array: 3.5 3.5 3.5 3.5 3.5 3.5 3.5
⇑
Зв’язані теми
- Поняття класу. Загальна форма оголошення класу. Об’єкт класу. Поля класу. Приклади. Ключове слово this
- Ініціалізація даних в класі. Конструктор класу. Конструктор за замовчуванням
⇑