Ответ
Поле int, объявленное как член класса (class), хранится в управляемой куче (heap). Оно является неотъемлемой частью памяти, выделенной для экземпляра этого класса.
Правило: Данные экземпляра класса (поля, включая типы значений) всегда размещаются в куче вместе с заголовком объекта.
Пример для сравнения:
// КЛАСС: поле в куче
class MyClass
{
public int NumberInHeap; // Часть объекта MyClass в куче.
}
// СТРУКТУРА: поле хранится там же, где и сама структура.
struct MyStruct
{
public int NumberFollowsStruct; // В стеке, если struct — локальная переменная.
// В куче, если struct — поле другого класса.
}
void Example()
{
// Экземпляр класса (и его поле 'NumberInHeap') — в КУЧЕ.
MyClass obj = new MyClass();
obj.NumberInHeap = 42;
// Экземпляр структуры (и его поле 'NumberFollowsStruct') — в СТЕКЕ.
MyStruct localStruct;
localStruct.NumberFollowsStruct = 24;
}
Практический вывод: Нельзя сказать "int всегда в стеке". Контекст (класс vs структура, локальная переменная vs поле) полностью определяет место хранения. Поле класса — часть объекта в куче.