我尝试编写此类:
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/