Найважливіша різниця між класом і структурою полягає в тому, що class є еталонним типом, а struct — типом значення, і їх розподіл у пам'яті різний.
Що таке клас?
Клас, фундаментальне поняття в об'єктно-орієнтованому програмуванні, — це тип власної структури даних, яка зазвичай містить поля, атрибути, методи, атрибути, конструктори, індексери, оператори тощо. У .NET усі класи в кінцевому підсумку успадковують від класу System.Object, тому вони є типом посилання, тобто коли ви створюєте новий екземпляр класу, адреса цього екземпляра в керованій купі зберігається в стеку, а значення екземпляра зберігається в керованій купі.
Що таке структура?
Структура — це тип значення, який використовується для організації набору пов'язаних змінних в одну змінну сутність. Усі структури успадковуються від класу System.ValueType, тому вони є типом значення, тобто екземпляр структури створюється на стеку, де присвоєно потоку, і зберігає саме значення. Тож при використанні struct ми можемо розглядати її як базовий тип-клас, наприклад int і char.
1. клас — це тип посилання, а structs — тип значення
Оскільки клас є типом посилання, клас можна встановити як null. Але ми не можемо зробити struct null, бо це тип значення.
2. Коли ви створюєте клас, він буде створений на купі. І ви створюєте структуру, яка буде створена на стеку
3. Ви використовуєте посилання на екземпляр класу. І ви не використовуєте посилання на структуру. (замість цього використовуйте їх безпосередньо)
4. Коли ми передаємо клас як аргумент методу, ми передаємо посилання. struct передає значення, а не посилання.
5. Структури не можуть мати ініціалізаторів, класи можуть мати ініціалізатори.
6. Класи можуть мати очевидні конструктори без параметрів, але Structs — ні.
7. Нове ключове слово має бути створене перед використанням класу, і Struct не потребує його
8. Клас підтримує спадковість і поліморфізм, Struct — ні. Примітка: Але Struct може реалізовувати інтерфейси так само, як класи
9. Оскільки Struct не підтримує спадковість, його члени не можуть бути змінені захищеними або захищеними Internal
10. Конструктор Class не повинен ініціалізувати всі поля, а конструктор Struct повинен ініціалізувати всі поля
11. Клас може визначати деструктора, але Struct не може
12. Class підходить для великих і складних даних, а Struct — для нових типів, які часто використовуються як комбінація деяких даних.
Прикладні випадки: Struct має переваги у продуктивності, а Class — переваги об'єктно-орієнтованого розширення.
Тип, що використовується для базового сховища даних, розроблений як тип Struct, а тип, що використовується для визначення поведінки додатка, — як клас. Якщо ви не впевнені щодо майбутнього застосування цього типу, варто використовувати Class. |