Підрозділ 3.Q
Питання для самоконтролю
Питання для самоконтролю — Розділ 3. Класи, структури та простір імен 3.1. Класи та об'єкти 1. Чим відрізняється клас від об'єкта ? Наведіть аналогію з реального життя і поясніть, чому не можна поставити знак р
Питання для самоконтролю — Розділ 3. Класи, структури та простір імен
3.1. Класи та об'єкти
Чим відрізняється клас від об'єкта? Наведіть аналогію з реального життя і поясніть, чому не можна поставити знак рівності між цими поняттями.
Що відбувається покроково при виконанні рядка
Patient patient1 = new Patient();? Опишіть всі три дії, які виконує середовище виконання.Що виведе наступний код? Поясніть чому.
Patient a = new Patient(); a.Name = "Олена"; Patient b = a; b.Name = "Марія"; Console.WriteLine(a.Name);У чому різниця між полем і методом класу? Чому метод може звертатися до полів без додаткових параметрів?
Пояснить різницю між
publicіprivateмодифікаторами доступу на рівні полів. Чому в реальних проєктах поля роблять приватними?Що таке
nullдля змінної типу класу? Що станеться, якщо викликати метод черезnull-посилання, і як цього уникнути?Напишіть клас
Bookз полямиTitle(рядок),Author(рядок),Year(ціле число) і константоюMaxTitleLength = 200. Додайте методDisplay(), що виводить інформацію про книгу. Створіть масив з трьох книг і виведіть їх у циклі.Де зберігаються значення полів об'єкта — у стеку чи в купі? Де зберігається змінна, що містить посилання на об'єкт? Чому ця різниця важлива для розуміння семантики присвоєння?
3.2. Конструктори, ініціалізатори та деконструктори
Що станеться, якщо у класі визначити конструктор з параметрами, але не визначити конструктор без параметрів? Чи можна тоді писати
new Patient()?Поясніть синтаксис
: this(...)у конструкторі. Який порядок виконання, коли один конструктор делегує іншому?Що виведе наступний код?
class Patient { public string Name; public int Age; public Patient() : this("Невідомий") {} public Patient(string name) : this(name, 0) {} public Patient(string name, int age) { Name = name; Age = age; Console.WriteLine($"Patient({name}, {age})"); } } Patient p = new Patient();Чим ініціалізатор об'єкта
{ field = value }відрізняється від конструктора? Що відбувається першим — конструктор чи ініціалізатор?Поясніть, для чого потрібен статичний конструктор. Коли він виконується і скільки разів?
Порівняйте ланцюжок конструкторів через
this(...)і єдиний конструктор з параметрами за замовчуванням. Коли один підхід кращий за інший?Що таке деконструктор у C# (метод
Deconstruct)? Чим він відрізняється від деструктора? Напишіть класPointз координатамиXіY, реалізуйте деконструктор і продемонструйте його використання.Для чого використовується
privateконструктор? Наведіть приклад патерну Singleton з поясненням, чому він потребує саме приватного конструктора.
3.3. Клас Program та метод Main. Програми верхнього рівня
Що таке точка входу програми в C#? Як CLR знаходить її при запуску?
Що робить компілятор, коли бачить програму верхнього рівня (без явного класу
Programі методуMain)? Який еквівалентний код він генерує?Визначте, що з наступного потрапить усередину методу
Main, а що буде поза ним при top-level синтаксисі:- оголошення локальної змінної
string greeting = "Привіт"; - оголошення локальної функції
void Say(string s) { ... } - оголошення класу
class Helper { ... }
- оголошення локальної змінної
Яке обмеження існує на порядок розміщення класів і інструкцій у top-level програмі? Що станеться, якщо порушити цей порядок?
У яких ситуаціях доцільно писати явний
class Programіstatic void Main(...), а не покладатися на top-level синтаксис?Як оголосити точку входу, щоб можна було використовувати
awaitпрямо вMain? Що відбувається з top-level програмою, коли в ній вперше зустрічаєтьсяawait?Чому метод
Mainзавжди оголошується якstatic? Що це означає стосовно об'єктів?
3.4. Структури
Назвіть ключову відмінність між
structіclassз точки зору семантики копіювання. Що відбудеться, якщо присвоїти одну структуру іншій?Що виведе наступний код? Чому?
BloodPressure bp1 = new BloodPressure { systolic = 120, diastolic = 80 }; BloodPressure bp2 = bp1; bp2.systolic = 145; Console.WriteLine(bp1.systolic);Починаючи з якої версії C# дозволено ініціалізувати поля структури при оголошенні? Що обов'язково потрібно зробити, якщо такі значення визначені?
Поясніть оператор
withдля структур. Чи змінює він оригінальний об'єкт?Що таке
readonly struct? Яку гарантію вона надає і яка від цього перевага з точки зору продуктивності?Порівняйте
structіrecord struct. Щоrecord structдодає автоматично і коли його варто використовувати замість звичайної структури?Чи може структура мати конструктор без параметрів? Чи була ця можливість завжди доступна? Що відбувається, якщо структура має параметризований конструктор, але не має конструктора без параметрів, і ми пишемо
new BloodPressure()?Спроєктуйте структуру
Temperatureдля зберігання температури тіла (у градусах Цельсія) якreadonly struct. Додайте конструктор з параметром і методIsFever(), що повертаєtrueякщо температура перевищує 37.5.
3.5. Типи значень та типи посилань
Назвіть щонайменше по чотири приклади типів значень і типів посилань у C#. До якої категорії належить
string?Поясніть різницю між стеком і купою: яка область пам'яті для чого призначена, хто звільняє пам'ять у кожній з них?
Що виведе цей код і чому?
Patient patient1 = new Patient("Іван", 45); Patient patient2 = patient1; patient2.name = "Марія"; Console.WriteLine(patient1.name);Що таке поверхове копіювання (shallow copy)? Наведіть сценарій зі структурою, що містить поле-клас, де поверхове копіювання призводить до несподіваного результату.
Поясніть механізм boxing і unboxing. Які витрати вони спричиняють і чому?
Що станеться при виконанні такого коду?
int age = 45; object boxed = age; double wrong = (double)boxed;Де виникне помилка — під час компіляції чи виконання? Як це виправити?
Чому
List<int>є кращим рішенням ніжArrayListдля зберігання цілих чисел? Яка роль generics у цьому контексті?Порівняйте поведінку при присвоєнні
int b = aтаPatient b = a. Поясніть, що саме копіюється у кожному випадку, і намалюйте (або опишіть словами) стан пам'яті після кожного присвоєння.