c# - 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 意味着我在某个地方有一个无限循环或无限递归,但老实说,我不知道在哪里,也不知道如何解决它。
解决方案
此行SnakeGame
导致递归
public readonly Movement Movement = new Movement(SenseHat);
由于Movement
继承自SnakeGame
,其构造函数将初始化SnakeGame
,再次调用上面的行来初始化自己的Movement
字段。这导致递归。
推荐阅读
- mongodb - Camel 3.5 MongoDB 组件和带有简单 String _id 字段的 findById
- linux - 有没有办法在不清除屏幕的情况下替换行?
- c - 如何从 C 中的字符串中删除某些字符?
- function - golang函数在传入参数中返回值
- javascript - 使用 javascript 和 css 将任务列表添加到我的 HTML
- spring-boot - Spring Boot 2.3+ 不再打印有用的错误信息以进行验证(来自 MethodArgumentNotValidException)
- python - 无法导入名称“MultiRNNCell”
- typescript - Vue @Watch 未触发布尔值更改
- authentication - 使用 oauth 2.oc 从 azure 函数调用 web api#
- r - knitr 在 ggplots 中渲染缺少的标签