我的程序需要确定对象图是否包含循环引用。对象图包含各种类型的对象实例(所有对象实例都来自一个基类),如果格式良好,则应形成层次结构。循环引用将在处理期间导致无限循环。我需要在开始处理各个元素之前确定这一点,以产生适当的错误消息。
该程序是用C ++ / CLI编写的,目标是.NET 3.5。我想也许反思可能会提供一些优雅的方法来实现这一目标,但到目前为止我还没能把这些碎片放在一起。
如果不存在预制的简易API,我可以自己构建一个堆栈并组成这样的函数;然而,由于涉及各种类别,反思可能会发挥作用。还是我咆哮着完全错误的树?
答案 0 :(得分:1)
没有使用反射检测循环的内置方法。但是,这里似乎没有反思。
从您所说的内容来看,这张图中的对象听起来就像是您自己编写的内容。我假设图中的对象各自拥有与其他对象的链接,并且它们链接到的对象列表是公开可用的。由于它们都来自一个共同的基类,因此在那里实现起来并不困难,并且您不必担心所有各种子类。
假设链接对象在基类上定义的公共API上可用,则遍历图形以查找图中的周期并不困难;我想象有很多众所周知的算法可以找到它们(尽管我承认我还没看过)。