代码:
interface IModule
{
string Title{get; set;}
}
interface IModularizedStructure
{
ReadOnlyCollection<IModule> Modules {get;}
}
class ModularizedStructure: IModularizedStructure
{
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get
{
return Modules;
}
private set
{
Modules = value;
}
}
public ModularizedStructure ()
{
_modules = new List<IModule>();
Modules = new ReadOnlyCollection<IModule>(_modules);
}
}
我在StackOverflow
尝试Modules private set;
时收到Modules = new ReadOnlyCollection<IModule>(_modules);
错误,但我无法理解其原因。我怀疑它以某种方式与界面相关联,但无法弄清楚究竟是如何。
我找到了一个可以让我获得所需行为的解决方案:
interface IModule
{
string Title{get; set;}
}
interface IModularizedStructure
{
IList<IModule> Modules {get;}
}
class ModularizedStructure: IModularizedStructure
{
List<IModule> _modules;
public IList<IModule> Modules
{
get
{
return _modules.AsReadOnly();
}
}
public ModularizedStructure ()
{
_modules = new List<IModule>();
}
}
答案 0 :(得分:1)
你的问题在这里:
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get
{
return Modules;
}
private set
{
Modules = value;
}
}
您正在访问Modules
的getter(和setter)。这导致无休止的递归,最终导致StackOverflowException
。
你想要做的是:
List<IModule> _modules;
public ReadOnlyCollection<IModule> Modules
{
get;
private set;
}
这将适用于您现有的构造函数代码。