【问题标题】:Stack Overflow Exception on Auto Properties自动属性的堆栈溢出异常
【发布时间】:2018-02-20 05:16:52
【问题描述】:

我的应用程序在启动某些自动属性和对象创建时抛出 Stack Overflow 异常。

他们工作没有问题,我没有修改他们。

基本上我有一个实现接口“IRule”的抽象类“Rule”,这些属性来自接口。 然后我有一个继承自 Rule 的子类,我得到了那个子类的异常。

编辑:

public class RuleA: Rule
{
    private RuleA_bestSettings;

    #region PROPERTIES

    public override Rule BestSettings { get { return _bestSettings; } set { _bestSettings = value as RuleA; } }


    #endregion

    public RuleA()
    {
        Initialize();
    }

    protected override void Initialize()
    {
        base.Initialize();

        _bestSettings = new RuleA();
    }



}

}

现在我在实例化属性时遇到 Initialize 方法异常

当实例化具有这些属性的新对象时会发生这种情况。

Si è verificata l'eccezione System.StackOverflowException
  HResult=0x800703E9
  Messaggio=Generata eccezione di tipo 'System.StackOverflowException'.

我想不通,有什么想法吗?谢谢!

【问题讨论】:

  • 如果您还添加使用此属性的代码以及获得异常的位置,您的问题可能会更好
  • 你能发布异常和调用堆栈吗?那个属性看起来不错。这是另一回事。
  • 抱歉,我已经编辑了问题。
  • 我添加了我得到异常的方法
  • 我没有更多关于这些属性的代码,它都在那里。我不知道如何分享整个源代码。

标签: c# exception properties stack overflow


【解决方案1】:

在您的Initialize 部分,您正在实例化一个新的RuleA。这个新的RuleA 将自行构建,这样它将调用自己的Initialize 部分并创建第三个RuleA。这将创建第四个。还有五分之一。以此类推,直到堆栈填满。

我不确定您要完成什么,但我的猜测是,而不是这个

protected override void Initialize()
{
    base.Initialize();

    _bestSettings = new RuleA();
}

你的本意是这样做的:

protected override void Initialize()
{
    base.Initialize();

    _bestSettings = this; 
}

【讨论】:

  • 谢谢,应该是这个问题..这是我在课堂上所做的最后一次更改。基本上我需要一个与属性相同类型的 RuleA 的新对象。我在构造函数上调用的 Initialize 方法上实例化它时犯了一个错误。我已经将它移到另一种方法上,现在它正在工作!非常感谢大家的帮助,很抱歉造成混乱。
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 2016-02-19
  • 2012-05-28
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
相关资源
最近更新 更多