我尝试编写此类:

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);

关于c# - 如何解决StackOverflowException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24507427/

10-10 14:35