假设你有以下类(C#代码不太好,但你可以理解):
public abstract class AmICircular
{
// assume Children is never null
private List<AmICircular> Children {get;set;}
// assume target is never null
public void Add(AmICircular target)
{
target.PerformCircularReferenceCheck(this);
Children.Add(target);
}
// throws when a circular reference is detected
protected abstract void PerformCircularReferenceCheck(AmICircular target);
}
你将如何实现PerformCircularReferenceCheck?不,这不是作业。
在我看来,天真的实现方式是对this和所有子元素进行引用检查,然后调用PerformCircularReferenceCheck在目标上,传递this。但我想知道是否有更好、经过有效验证的方法来做到这一点,比如添加一个方法来折叠this和目标的整个Children引用树,然后检查结果(减少堆栈压力?),或者通过使用不同的(可能是自检!)集合而完全避免检查List<T>?
你会怎么做?
编辑:正如stefan指出的那样,只需要确定目标是否可以访问此内容。