@MishkaVNorky

Property и Fields?

Всем привет. У меня вопрос выделяет ли память Property ?
Как понимаю не должно ибо смысла нет, тогда логичнее было использовать методы.

Но в новой версии C# можно использовать auto Property. То есть propert может быть сразу переменной.

int CurrentHealth { get; set; }
CurrentHealth = 100;

int CurrentHealth 
{

get { .. }
set { ... }

}


В каком случаи Property выделяет память?
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Да, при создании автосвойства создаётся скрытая переменная - данные должны где-то храниться.

Эта переменная создаётся с хитрым именем (с запрещёнными в c# символами в имени переменной). Можно увидеть это таким способом:
class TestClass
{
    private int _a;
    public int A
    {
        get { return _a; }
        set { _a = value; }
    }

    public int B { get; set; }
}

var testClass = typeof(TestClass);
var fields = testClass.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var fieldInfo in fields)
{
    Console.WriteLine(fieldInfo.Name);
}
// результат:
// _a
// <B>k__BackingField
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Meloman19
Свойства - это лишь абстракция. Любое свойство с геттером и сеттером по сути разворачивается в два обыкновенных метода. Для программы они ничем не выделяются особенным, это нужно лишь программисту.

В этих самых геттерах и сеттерах ты можешь работать с полями, как и в любом другом методе класса.

Автосвойство - это лишь упрощение, если требуется свойство, в котором кроме установки значения одного поля, иной логики нет. В закулисье автосвойство просто само по себе создаёт поле и два (или один) метод, который возвращает значение этого поля (или устанавливает).

Что касается памяти: поле занимает место в памяти и для каждого экземпляра своё место. Геттеры и сеттеры свойства, как и обыкновенные методы - только один раз в памяти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Lazy Bear Games Санкт-Петербург
от 80 000 до 180 000 руб.
PHYGITALISM Москва
от 130 000 руб.
Playneta Санкт-Петербург
от 150 000 до 300 000 руб.
21 янв. 2019, в 01:19
10000 руб./за проект
20 янв. 2019, в 22:33
30000 руб./за проект
20 янв. 2019, в 22:03
1000 руб./за проект