Если бы мы имели такой код:Выполняют ли свойства/методы в классах пространство в памяти?
public class Enemy
{
public int hp;
}
Enemy
Тогда объект будет принимать 4 байта в 32-битных машин, и 8 байт в 64-разрядных (поправьте меня, если я ошибаюсь).
Если мы изменим его на что-то вроде этого:
public class Enemy
{
public int hp;
public void Attack() {}
}
Enemy
объект будет по-прежнему принимать тот же объем памяти, как это было раньше, не так ли?
То же самое для этого:
public class Enemy
{
private int hp;
public int Hp { get { return hp; } set { hp = value; } }
}
Из того, что я знаю, это свойство является функцией, но рассматривается как переменная, не так ли?
Так что, если мы сделали это:
public class Enemy
{
public int Hp { set; get; }
}
Значит ли это, Enemy
Теперь объект не занимает никакого пространства памяти вообще? Это не имеет никакого смысла.
Или даже это, по этому вопросу:
public class Enemy
{
public void DoSomething() { }
}
Может кто-нибудь объяснить?
Как минимум - для каждого экземпляра класса требуется хотя бы один указатель на него, или это будет сбор мусора. Существует дополнительная информация о битах фреймворков, которые различаются. Объем памяти, необходимый для каждого метода, зависит от реализации. Попытка учета каждого байта, используемого на таких языках, может быть очень сложной, потому что у вас нет прямого контроля над ней. Зачем вам нужно знать? Или это просто об авто-свойствах? –
Я просто хочу понять, как это работает. Я изначально просил узнать о свойствах. Но тогда, поскольку они похожи на функции, я также хотел узнать о них. – vexe
'объект будет принимать 4 байта в 32-битных машинах и 8 байтов в 64-битных (исправьте меня, если я ошибаюсь)' Не уверен в этом. Независимо от того, что вы запускаете 32 бит или 64 бит, 'int' будет 4 байта, поэтому он называется' Int32'. Я думаю, вы вводите в заблуждение 'IntPtr' с' int'. Исправьте меня, если я ошибаюсь –