
- •Ключове слово this
- •Ключове слово static
- •Статичний конструктор
- •Інкапсуляція з використанням методів get і set
- •Інкапсуляція з використанням властивостей
- •Організація робіт при описі класу. Атрибут partial
- •Спадкоємство
- •Int point; // поле
- •Додавання до класу запечатаного класу
- •Вкладеність класів
- •Поліморфізм
- •Абстрактні класи
- •Приховування членів класу
- •Оператори as і is
- •Структури
Структури
Думається, що така сутність в мові, як структура, була безпосередньою попередницею поняття класів. Дійсно, ідея об'єднати в один об'єкт, в одну сутність дані різних типів з'явилася до класів, а в класі ця ідея отримала своє сьогоденне втілення. Тому в такій мові, як С, структури вивчаються досить детально і з різними удосконаленнями від однієї версії мови до іншої до вивчення класів. Проте в C#, ставши на позицію класу, можна побачити, що фактично структура - це приватний випадок класу, правда, з деякими особливостями.
Почнемо з оголошення структури. Синтаксис оголошення такий (покажемо на прикладі):
public struct Person
{
public int x, у;
public Person(int p1, int p2)
{
x = p1;
у = p2;
}
}
Ключове слово struct визначає задану сутність як структуру. Після цього задається ім'я структури (Person). Далі знайомі нам поняття: поля, конструктор. Але для структур мають місце наступні особливості.
-
На відміну від класу структура не підтримує спадкування.
-
В оголошенні структури поля не можуть бути ініціалізовані доти, поки вони будуть оголошені як постійні або статичні.
-
Структура не може оголошувати використовуваний за замовчуванням конструктор (конструктор без параметрів).
-
Структури копіюються при присвоєнні. При присвоєнні структури до нової змінної виконується копіювання всіх даних, а будь-яка зміна нової копії не впливає на дані в початковій копії. Пригадайте, що у класів дані не переміщаються, а копіюються тільки посилання на дані. Звідси видно, що структури є типами значень, а класи - посилальними типами.
-
На відміну від класів структури можна створювати без використання оператора new (тобто вони можуть не зберігатися в кучі).
-
Структури можуть оголошувати конструктори, які мають параметри.
Приклад програми, яка використовує структуру, приведений в лістингу 8.17.
Лістинг 8.17
using System;
namespace app35_struct
{
public struct Person
{
public int x, y;
int c; // Тип за замовчуванням - private
public Person(int p1, int p2, int p3)
{
x = p1;
y = p2;
c = p3;
}
public int M(int a)
{
c = a;
return c;
}
}
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Робота із структурами");
Person p = new Person(1, 2, 3);
int sum = p.x + p.y;
sum += p.M(4); // M() повторно визначає поле "с"
Console.Write("Press any key to continue...");
Console.ReadKey(true);
}
}
}
Резюме
Вивчення класів і початків об'єктно-орієнтованого програмування, в основному, закінчено. Як користуватися класами? Класи - це звичайні типи даних, тільки складніші. Звичайні в тому сенсі, що оголошення змінних цього типу - типу класів - відбувається за тими ж правилами, що і оголошення змінних звичайних, звичних нам простих змінних: цілочисельних, рядкових і т. п. Але є невелика добавка: якщо прості змінні оголошуються теж просто: тип - ім'я, то для класів треба ще через знак присвоєння створити з них екземпляр (або, що те ж саме, об'єкт) за допомогою оператора new і конструктора класу, в якому задаються ініціалізуючі створюваний об'єкт аргументи. З об'єктом вже можна працювати. Об'єкт, створений з класу як з шаблону, містить в собі всі потрібні дані (поля, властивості і методи) для своєї обробки. І навпаки, якщо ви хочете обробляти якийсь об'єкт, то створюєте для нього клас, в який закладаєте потрібні характеристики об'єкта (поля і властивості) і методи обробки цих характеристик, а потім оголошуєте якусь змінну типом цього класу, створюєте з класу об'єкт і т. д. Крім всього іншого, ви можете користуватися значною бібліотекою класів, яка постачається разом з середовищем програмування, підключаючи їх до своєї програми спеціальними засобами, про які ми довідаємося пізніше.
Ми також розглянули поняття структури. Але тепер, коли ми відчули потужність такої сутності, як клас, робота із структурами здається малоцікавою.