Каждому «классу» требуется достаточно памяти, чтобы вместить весь его jit-скомпилированный код для всех его членов, которые были вызваны средой выполнения (хотя, если вы не вызываете метод в течение достаточно долгого времени, CLR может выпустить эту память и повторно соединить ее снова, если вы вызовете ее снова ... плюс достаточно памяти для хранения всех статических переменных, объявленных в классе ... но эта память выделяется только один раз на класс, независимо от того, сколько экземпляров класса вы создать.
Для каждого экземпляра класса, который вы создаете (и он не был собран сборщиком мусора), вы можете приблизить объем памяти, складывая использование памяти каждой объявленной переменной на основе экземпляра ... (поле)
ссылочные переменные (ссылки на другие объекты) занимают 4 или 8 байтов (32/64 битная ОС?)
int16, Int32, Int64 занимают 2,4 или 8 байтов соответственно ...
строковая переменная занимает дополнительное место для некоторых элементов метаданных (плюс размер указателя адреса)
Кроме того, можно считать, что каждая ссылочная переменная в объекте «косвенно» включает память, занимаемую кучей объектом, на который она указывает, хотя вы, вероятно, захотите считать эту память принадлежащей этому объекту, а не переменная, которая ссылается на него ...
и т.д.. и т.д.