如何解决StackOverflowException

比尔卡斯特里

我尝试编写此类:

public class ModelManager
{
    public OmniacareHomeProductionEntities _db;

    public CategoriaManager categoriaManager 
    { 
        get { return categoriaManager; }
        set 
        {
            if (categoriaManager == null)
            {
            categoriaManager = new CategoriaManagerImpl();
            }
        }
    }

    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ModelManager));
    public ModelManager()
    {
        _db = new OmniacareHomeProductionEntities();
    }
}

CategoriaManager是一个接口,CategoriaManagerImpl是一个实现CategoriaManager的类。

我在这种模式下使用ModelManager类:

ModelManager modelManager = new ModelManager();
modelManager.categoriaManager.saveLocalCategory(category, true);

因此,当我尝试运行此代码时,此行出现了StackOverflowError

get 
{
    return categoriaManager;
}

我的错误在哪里?你能帮助我吗?

提格兰

你的问题很明显在这里

  public CategoriaManager categoriaManager 
    { 
        get 
        {
            return categoriaManager;
        }
        set 
        {
            if (categoriaManager == null)
            {
                categoriaManager = new CategoriaManagerImpl(); //HERE !!!!!!!!!
            }
        }
    }

成员的名称与属性相同,例如,如下更改:

    public CategoriaManager CatManager //NAME OF HE PROPERTY ISCHANGED !!!!
    { 
        get 
        {
            return categoriaManager;
        }
        set 
        {
            if (categoriaManager == null)
            {
                categoriaManager = new CategoriaManagerImpl();
            }
        }
    }

一般准则:

  • 对于属性,请使用大写字母开头的名称
  • 对于字段,请使用小写字母开头的名称

因此,您的代码会像这样:

ModelManager modelManager = new ModelManager();
modelManager.CatManager.saveLocalCategory(category, true);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章