Свойства увеличивают объем памяти экземпляров? - PullRequest
4 голосов
/ 19 ноября 2010

Это, вероятно, глупый вопрос, но занимают ли свойства объекта какую-либо память на экземпляр?

Насколько я понимаю, когда вы создаете экземпляр объекта, каждое поле значения занимает его размер, а типы ссылочных полей составляют 4 байта на поле. Но скажем, у вас есть объект с 1000 свойствами, который извлекает данные через какой-то другой объект, занимают ли эти свойства какую-либо память сами по себе?

Автоматические свойства, естественно, имеют значение, поскольку это просто синтаксический сахар, но не похоже, что обычные свойства должны ...

Ответы [ 5 ]

9 голосов
/ 19 ноября 2010

Свойства аналогичны обычным методам в этом отношении.

Код должен храниться где-то (один раз для Типа), а любые поля, которые используются (Авто свойства!), Должны храниться для каждого экземпляра. Локальные переменные также займут немного памяти.

4 голосов
/ 19 ноября 2010

Прямо от Apress Иллюстрированный C #

Unlike a field, however, a property is a function member.
- It does not allocate memory for data storage!
1 голос
/ 19 ноября 2010

Нет, свойства являются просто синтаксическим сахаром для методов получения и установки. Только вспомогательные поля занимают память. Если у вас нет резервных полей, у вас не будет использования памяти для каждого экземпляра.

0 голосов
/ 19 ноября 2010

Свойства транслируются в два (или только один в случае, если вы предоставили только метод получения или, возможно, установки), который

public int MyProp
{
    get { return 1; }
    set { myField = value; }
}

переводится во время компиляции (возможно, Эрик Липпер исправит меня в этом,потому что, возможно, это происходит на этапе предварительной обработки или sth) в методы

public int Get_MyProp();
public int Set_MyProp(int value);

, в целом они не несут никаких дополнительных затрат, кроме как только для дополнительных методов, включенных в объект

0 голосов
/ 19 ноября 2010

Если вы посмотрите на скомпилированный класс C #, например, рефлектор , вы увидите, что компилятор фактически переводит свойства в методы get и set, автоматические свойства переводятся в методы get и set с полем поддержки. поэтому поле будет занимать столько же места, сколько и обычное поле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...