Класи - це еталонні типи, а структури - типи значень.
Коли я кажу, що Класи - це еталонні типи,
вони в основному містять адресу змінних екземплярів.
Наприклад:
Class MyClass
{
Public Int DataMember; //By default, accessibility of class data members
//will be private. So I am making it as Public which
//can be accessed outside of the class.
}
В основному методі
я можу створити екземпляр цього класу, використовуючи новий оператор, який виділяє пам'ять для цього класу
і зберігає базовий адресу цього типу в змінну типу MyClass (_myClassObject2).
Static Public void Main (string[] arg)
{
MyClass _myClassObject1 = new MyClass();
_myClassObject1.DataMember = 10;
MyClass _myClassObject2 = _myClassObject1;
_myClassObject2.DataMember=20;
}
У вищезгаданій програмі MyClass _myClassObject2 = _myClassObject1; інструкція вказує, що обидві змінні типу MyClass
- myClassObject1
- myClassObject2
і вказуватиме на те саме місце пам'яті.
В основному він призначає те саме місце пам'яті в іншій змінній того ж типу.
Тож якщо будь-які зміни, які ми вносимо в будь-який з об'єктів типу MyClass, матимуть вплив на інший,
оскільки обидва вказують на одне місце пам’яті.
"_myClassObject1.DataMember = 10;" у цьому рядку обидва учасники даних об’єкта будуть містити значення 10.
"_myClassObject2.DataMember = 20;" у цьому рядку обидва учасника даних об’єкта містять значення 20.
Зрештою, ми отримуємо доступ до членів даних об’єкта за допомогою покажчиків.
На відміну від класів, структури є ціннісними типами. Наприклад:
Structure MyStructure
{
Public Int DataMember; //By default, accessibility of Structure data
//members will be private. So I am making it as
//Public which can be accessed out side of the structure.
}
Static Public void Main (string[] arg)
{
MyStructure _myStructObject1 = new MyStructure();
_myStructObject1.DataMember = 10;
MyStructure _myStructObject2 = _myStructObject1;
_myStructObject2.DataMember = 20;
}
У вищезгаданій програмі
інстанціювання об'єкта типу MyStructure за допомогою нового оператора та
збереження адреси у змінній _myStructObject типу MyStructure та
присвоєння значенню 10 члену структури структури за допомогою "_myStructObject1.DataMember = 10".
У наступному рядку
я декларую іншу змінну _myStructObject2 типу MyStructure і призначаю їй _myStructObject1.
Тут компілятор .NET C # створює ще одну копію об’єкта _myStructureObject1 і
призначає це місце пам'яті в змінну MyStructure _myStructObject2.
Отже будь-яка зміна, яку ми вносимо до _myStructObject1, ніколи не матиме впливу на іншу змінну _myStructObject2 типу MyStructrue.
Ось чому ми говоримо, що Структури - цінні типи.
Отже, безпосередній клас Base для класу - Object, а безпосередній клас Base для Structure - це ValueType, який успадковується від Object.
Класи підтримуватимуть наслідування, тоді як структури не будуть.
Як ми це говоримо?
І в чому причина цього?
Відповідь - Заняття.
Він може бути абстрактним, запечатаним, статичним та частковим і не може бути приватним, захищеним та захищеним внутрішнім.