Відповідь Свічка хороша, але я думав, що я додам кілька додаткових балів.
По-перше, абзац хибний. Типи вказівників не успадковують об'єкт. Значення, які під час компіляції, як відомо, є типом інтерфейсу або типом параметрів типу, під час виконання будуть або недійсними посиланнями, або сумлінними екземплярами чогось, що успадковується від об'єкта, але воно завжди структурувало мене як не дивно, що ці типи " успадковувати "від об'єкта; успадкування - це властивість членів предка членами нащадка, але ви зазвичай не вважаєте "ToString" членом IEnumerable. Ви вважаєте це членом того, що реалізує IEnumerable .
Абзац також є помилковим, оскільки це єдине місце, де "примітивний тип" з'являється у специфікації, і він з'являється без визначення. Тому вона є і непотрібною, і заплутаною, і її слід усунути.
Я хотів, щоб цей абзац був виправлений на деякий час. Наступного разу, коли я побачу Мадса, я нагадаю йому.
Для вирішення вашого конкретного питання: svick звичайно правильний, але корисно переглянути конкретний приклад. Коли ви говорите:
struct ColorfulInt
{
int value;
Color color;
...
}
і ви створюєте, скажімо, масив:
ColorfulInt[] x = new ColorFulInt[100];
Тоді сховище для цих 100 дюймів та 100 кольорів переходить у сам масив . Якби ColorfulInt був замість класу, то масив містив би 100 посилань на ColorfulInt, кожен з яких повинен був би бути розподілений індивідуально. Індивідуальне виділення цих сотень елементів набагато менш ефективно і в часі, і в просторі, ніж просто розподілення права зберігання в самому масиві.