首页 > 解决方案 > Getter C# 上的 StackOverflowException

问题描述

get;在抽象类中的属性上收到 StackOverflowException。

public abstract class SenseHatSnake
    {

        private readonly ManualResetEventSlim _waitEvent = new ManualResetEventSlim(false);

        protected SenseHatSnake(ISenseHat senseHat)
        {
            SenseHat = senseHat;
        }

        protected static ISenseHat SenseHat { get; set; } // This Line

        public virtual void Run()
        {
            throw new NotImplementedException();
        }

        protected void Sleep(TimeSpan duration)
        {
            _waitEvent.Wait(duration);
        }

    }

我在这里设置并获取它:

public class SnakeGame : SenseHatSnake
{
    private readonly int _gameSpeed = 1000;
    private static Timer _updatePositionTimer;
    private bool _gameOver = false;

    public readonly Movement Movement = new Movement(SenseHat);
    public readonly Food Food = new Food(SenseHat);
    public readonly Body Body = new Body(SenseHat);
    public readonly Display Display = new Display(SenseHat);
    public readonly Draw Draw = new Draw(SenseHat);

    public SnakeGame(ISenseHat senseHat)
        : base(senseHat)
    {
    }
    //More code
}

其中一个类如下所示:

public class Movement : SnakeGame
{

    public Movement(ISenseHat senseHat)
        : base(senseHat)
    {
    }
    //More code
}

据我所知,StackOverflowException 意味着我在某个地方有一个无限循环或无限递归,但老实说,我不知道在哪里,也不知道如何解决它。

标签: c#uwp

解决方案


此行SnakeGame导致递归

public readonly Movement Movement = new Movement(SenseHat);

由于Movement继承自SnakeGame,其构造函数将初始化SnakeGame,再次调用上面的行来初始化自己的Movement字段。这导致递归。


推荐阅读