Ініціалізація в класах. Способи ініціалізації даних в класі. Ініціалізація змінних базових типів. Ініціалізація з допомогою ініціалізаторів об’єктів
Зміст
- 1. Які є способи ініціалізації даних в класі при створенні об’єкту класу?
- 2. Загальна форма ініціалізації внутрішніх даних класу з допомогою безпосереднього присвоєння потрібного значення
- 3. Приклад ініціалізації одиночної змінної базового типу у класі
- 4. Приклад ініціалізації масиву змінних базового типу у класі
- 5. Використання ініціалізатора об’єкту для ініціалізації об’єкту класу в іншому класі
- 6. Використання ініціалізатора об’єкту для ініціалізації масиву об’єктів у класі
- 7. Використання ініціалізатора об’єкту для ініціалізації структурної змінної у класі
- 8. Приклад використання ініціалізатора об’єкту для ініціалізації масиву структурних змінних
- 9. Приклад ініціалізації змінної та масиву змінних типу зчислення (enum)
- 10. Які вимоги накладаються на оголошення змінної класу у випадку ініціалізації цієї змінної ініціалізатором об’єкту?
- Зв’язані теми
Пошук на інших ресурсах:
1. Які є способи ініціалізації даних в класі при створенні об’єкту класу?
У мові C# створення об’єкту класу здійснюється з допомогою оператора new. Під час створення, внутрішні дані (змінні) класу можуть бути ініціалізовані одним з наступних способів:
- з допомогою присвоєння змінній класу потрібного значення при її оголошенні (безпосередня ініціалізація). Цей спосіб використовується тільки для змінних базових типів. Якщо потрібно ініціалізувати об’єкт класу, то використовується ініціалізатор об’єктів;
- з допомогою конструктора класу;
- з допомогою ініціалізатора об’єктів. Цей спосіб застосовується для об’єктів класів чи структурних змінних. У цьому випадку, дані класу мають бути оголошені як загальнодоступні public.
2. Загальна форма ініціалізації внутрішніх даних класу з допомогою безпосереднього присвоєння потрібного значення
Внутрішні дані класу можуть бути ініціалізовані одразу при їх оголошенні з допомогою конструкції виду:
type variable = value;
У цій конструкції змінна з іменем variable типу type ініціалізується значенням value.
3. Приклад ініціалізації одиночної змінної базового типу у класі
Задано клас Month, який реалізує місяць року. У класі оголошується одна прихована змінна month, яка ініціалізується значенням 5 одразу при оголошенні
// клас, що реалізує місяць року class Month { // ініціалізація внутрішньої змінної при її оголошенні int month = 5; public int GetMonth() { return month; } public void SetMontgh(int _month) { month = _month; } }
Демонстрація використання об’єкту класу Month в іншому програмному коді
Month mn = new Month(); int t = mn.GetMonth(); // t = 5
4. Приклад ініціалізації масиву змінних базового типу у класі
Демонструється ініціалізація масиву з 5 чисел типу double, який оголошується в класі ArrayDouble5.
// клас, що реалізує масив з 5 чисел типу double class ArrayDouble5 { // ініціалізація масиву при оголошенні double[] A = { 3.5, 8.2, 1.6, 2.8, -0.0025 }; // методи доступу // зчитати елемент масиву з номером index public double GetAi(int index) { if ((index >= 0) && (index < 5)) return A[index]; return 0.0; } // записати нове значення в елемент масиву public void SetAi(int index, double value) { if ((index >= 0) && (index < 5)) A[index] = value; } }
Використання класу може бути наступним
// ініціалізація масиву у класі ArrayDouble5 ad = new ArrayDouble5(); double val = ad.GetAi(3); // val = 2.8 val = ad.GetAi(4); // val = -0.0025
5. Використання ініціалізатора об’єкту для ініціалізації об’єкту класу в іншому класі
Демонструється ініціалізація об’єктів класів з допомогою ініціалізаторів об’єктів. Задано три класи Line, Triangle, Figures. У класі Line оголошуються загальнодоступні (public) змінні, що описують координати відрізку на площині. У класі Triangle оголошуються загальнодоступні (public) змінні, що задають координати точок трикутника.
У класі Figures оголошуються два об’єкти (екземпляри) класів Line та Triangle. Укласі Figures здійснюється ініціалізація об’єктів класів Line та Triangle з допомогою ініціалізаторів об’єктів.
// клас, що реалізує лінію на координатній площині class Line { public int x1, y1, x2, y2; } // клас, що описує трикутник на координатній площині class Triangle { public int x1, y1, x2, y2, x3, y3; } // клас, що реалізує фігуру class Figures { // ініціалізація об'єкту класу Line ln = new Line { x1 = 0, y1 = 3, x2 = 2, y2 = 5 }; Triangle tr = new Triangle { x1 = 1, y1 = 1, x2 = 4, y2 = 0, x3 = 2, y3 = 1 }; // методи доступу public Line GetLine() { return ln; } public Triangle GetTriangle() { return tr; } }
Демонстрація використання класу Figures
Figures fg = new Figures(); Line ln; Triangle tr; int t; ln = fg.GetLine(); t = ln.x2; // t = 2 t = ln.y1; // t = 3 tr = fg.GetTriangle(); t = tr.y2; // t = 0 t = tr.x3; // t = 2
6. Використання ініціалізатора об’єкту для ініціалізації масиву об’єктів у класі
У прикладі продемонстровано ініціалізацію масиву об’єктів типу Worker у класі Workers. Ініціалізація здійснюється з допомогою ініціалізатору об’єктів.
// клас, що описує працівника class Worker { // обов'язково з модифікатором доступу public public string name; // П.І.Б. працівника public int age; // вік public double salary; // зарплата } // клас, в якому оголошується масив з 3 об'єктів типу Worker class Workers { public Worker[] wr = { new Worker { name = "Filippov F.F.", age = 35, salary = 70320.55 }, new Worker { name = "Johansonn S.", age = 37, salary = 66670.57 }, new Worker { name = "Gustaffson G.G.", age = 69, salary = 129380.55 } }; }
Важливо: для того, щоб можна було ініціалізувати масив Worker[] у класі Workers, потрібно щоб дані класу Worker були оголошені з модифікатором доступу public.
Використання масиву об’єктів wr може бути наступним:
Workers W = new Workers(); string name; int age; double salary; name = W.wr[1].name; // name = Johansonn S. age = W.wr[1].age; // age = 37 salary = W.wr[1].salary; // salary = 66670.57
7. Використання ініціалізатора об’єкту для ініціалізації структурної змінної у класі
Оголошується структура Book, що реалізує книгу. У класі CBook демонструється ініціалізація структурної змінної типу Book.
Ініціалізація можлива тільки тоді, коли структурна змінна в класі представлена як тип-посилання. Це означає, що для структурної змінної виділяється пам’ять оператором new.
// структура, що описує книгу struct Book { public string title; // назва книги public string author; // П.І.Б. автора public int year; // рік випуску public float price; // вартість книги } class CBook { // ініціалізація структурної змінної у класі як типу-посилання public Book b = new Book { title = "Tell the time 5+", author = "H. Cather", year = 2017, price = 110.00f }; }
Використання структурної об’єкту класу CBook може бути таким:
// об'єкт класу CBook CBook cb = new CBook(); string ttl = cb.b.title; // ttl = "Tell the time 5+"
Важливо: для того, щоб можна було ініціалізувати об’єкт b типу Book у класі CBook, поля структури (title, author, year, price) мають бути оголошені як public.
8. Приклад використання ініціалізатора об’єкту для ініціалізації масиву структурних змінних
У даному прикладі демонструється оголошення та ініціалізація масиву структур типу Book у класі CBook.
// структура, що описує книгу struct Book { public string title; // назва книги public string author; // П.І.Б. автора public int year; // рік випуску public float price; // вартість книги } class Books { // ініціалізація масиву структурних змінних в класі public Book[] B = { new Book { title = "Computer coding for kids", author = "Carol Vorderman", year = 2015, price = 320.00f }, new Book { title = "Math and English", author = "Paul Broadbent", year = 2015, price = 310.00f }, new Book { title = "Spelling 5+", author = "Hannah Catner", year = 2017, price = 0.00f } }; }
Використання об’єкту класу Books в іншому програмному коді
// об'єкт класу Books Books bk = new Books(); string author = bk.B[2].author; // author = "Hannah Catner"
9. Приклад ініціалізації змінної та масиву змінних типу зчислення (enum)
Задано зчислення Months, що визначає місяці року. У прикладі демонструється:
- ініціалізація змінної типу зчислення Months у класі CMonths. Ініціалізуються 3 змінні (члени даних класу) з іменами mn1, mn2, mn3;
- ініціалізація масиву змінних типу зчислення Months у класі CMonths.
// місяць року enum Months { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } // клас, в якому ініціалізуються внутрішні змінні типу зчислення class CMonths { public Months mn1 = Months.Feb; public Months mn2 = Months.Jun; public Months mn3 = Months.Nov; // масив змінних типу зчислення Months[] array = { Months.Sep, Months.Jun, Months.Jan }; }
10. Які вимоги накладаються на оголошення змінної класу у випадку ініціалізації цієї змінної ініціалізатором об’єкту?
Щоб ініціалізувати змінну класу з допомогою ініціалізатора об’єкту, ця змінна має бути оголошена як загальнодоступна з модифікатором доступу public. Інакше компілятор видасть повідомлення про помилку:
Variable is inaccessible due to its protection level
де variable – назва змінної у класі, яку потрібно ініціалізувати.
Зв’язані теми
- Ініціалізація даних в класі. Конструктор класу. Конструктор за замовчуванням
- Динамічне виділення пам’яті. Оператор new. Виділення пам’яті для типів-значень, структур, перечислень, об’єктів класів. Виділення пам’яті для масивів
- Поняття класу. Загальна форма оголошення класу. Об’єкт класу. Поля класу. Приклади. Ключове слово this. Вкладені класи