Якщо суб'єкт господарювання буде непорушним, питання про те, чи використовувати структуру або клас, як правило, буде швидкістю продуктивності, а не семантикою. У 32/64-бітній системі для посилань на класи потрібно зберігати 4/8 байт, незалежно від кількості інформації в класі; копіювання довідок до класу вимагатиме копіювання 4/8 байт. З іншого боку, кожен виразнийЕкземпляр класу матиме 8/16 байт накладних витрат на додаток до інформації, яку він містить, та вартості пам'яті посилань на нього. Припустимо, що потрібно масив з 500 сутностей, кожен з яких має чотири 32-бітні цілі числа. Якщо сутність є структурним типом, для масиву буде потрібно 8000 байт незалежно від того, чи всі 500 сутності однакові, всі різні або десь між ними. Якщо сутність типу класу, масив з 500 посилань займе 4000 байт. Якщо всі ці посилання вказують на різні об'єкти, об'єкти потребують додаткових 24 байтів кожен (12 000 байт на всі 500), загалом 16 000 байт - вдвічі більше, ніж вартість зберігання структури типу. З іншого боку, з коду створено один екземпляр об'єкта, а потім скопійовано посилання на всі 500 слотів масиву, загальна вартість складе 24 байти для цього примірника та 4, 000 для масиву - загалом 4024 байтів. Основна економія. Мало ситуацій спрацювало б так само, як і останній, але в деяких випадках можливо скопіювати деякі посилання на достатньо слотів масиву, щоб зробити такий обмін вартим.
Якщо сутність має бути змінною, питання про те, чи використовувати клас чи структуру, певним чином простіше. Припустимо, "Thing" - це або структура, або клас, який має ціле поле під назвою x, і робить такий код:
Річ t1, t2;
...
t2 = t1;
t2.x = 5;
Чи хочеться, щоб останнє твердження впливало на t1.x?
Якщо Thing - це тип класу, t1 і t2 будуть еквівалентними, тобто t1.x і t2.x також будуть еквівалентними. Таким чином, друге твердження вплине на t1.x. Якщо Thing - тип структури, t1 і t2 будуть різними екземплярами, тобто t1.x і t2.x будуть посилатися на різні цілі числа. Таким чином, друге твердження не вплине на t1.x.
Змінні структури та мутаційні класи мають принципово різну поведінку, хоча .net має деякі химерності в обробці мутацій структури. Якщо ви хочете, щоб поведінка типу типу (тобто "t2 = t1" копіювала дані з t1 в t2, залишаючи t1 і t2 як окремі екземпляри), і якщо ви можете жити з химерністю в обробці типів значення .net, використовуйте будова. Якщо ви хочете, щоб семантика типу значень, але хитрості .net призведе до порушення семантики типу значень у додатку, використовуйте клас та перемовляйте.