Это моя структура
public struct Timer
{
private readonly float _duration;
public float Time { get; private set; }
public Timer(float duration)
{
_duration = duration;
Time = duration;
}
public void Tick(float deltaTime)
{
if (Time == 0)
return;
Time -= deltaTime;
if (Time < 0)
Time = 0;
}
public void Reset()
{
Time = _duration;
}
}
Он может использоваться таким классом
public class Level : MonoBehavior
{
private Timer _timer = new Timer(10f);
private void Update()
{
_timer.Tick();
if (_timer.Time == 0)
{
print("Time's up!");
}
}
}
Поскольку структура содержит только типы значений, означает ли это, что она будет автоматически размещаться в стеке, когда она будет создана другим классом?
да, я думаю, однако этот метод может вызвать проблему. загляните на learn.microsoft.com/en-us/dotnet/csharp/language-reference/…
В этом контексте он окажется в куче вместе с остальной частью класса Level. Если бы это была, например, локальная переменная внутри метода, она была бы в стеке.
Это не будет размещено в стеке. Все члены класса выделяются в куче, независимо от того, являются ли они типами значений или нет.
Хотя в основном это так, стоит более подробно рассмотреть распределение переменных: ericlippert.com/2010/09/30/the-truth-about-value-types
Нет, объект класса хранится в куче сборщика мусора.