2015-11-12 33 views
-1

我的程序需要確定對象圖是否包含循環引用。對象圖包含各種類型的對象實例(所有類都來自一個基類),如果格式良好,則應該形成一個層次結構。循環引用會在處理過程中導致無限循環。我需要在開始處理各個元素之前確定它,以產生適當的錯誤消息。使用反射在.NET中檢測對象之間的循環引用?

該程序是用C++/CLI編寫的,面向.NET 3.5。我想也許Reflection可以提供一些優雅的方式來實現這一點,但到目前爲止,我還沒有能夠把這些作品放在一起。

如果預先製作的簡單API不存在,我可以自己構建一個堆棧並組成一個這樣的函數;然而,由於涉及到不同的類別,反射可能會起作用。還是我咆哮完全錯誤的樹?

回答

1

有沒有內置的方法來檢測循環使用反射。但是,這裏反思似乎沒有必要。

從你所說的話,這聽起來像這張圖中的對象是你自己寫的。我假定圖中的對象都擁有與其他對象的鏈接,並且它們鏈接的對象列表是公開可用的。因爲它們都是從一個共同的基類中下來的,所以在這裏實現起來應該不難,並且你不需要擔心所有的不同子​​類。

假設鏈接對象在基類上定義的公共API上可用,那麼遍歷圖來查找圖中的循環並不困難;我想有多種衆所周知的算法可以找到它們(雖然我承認我沒看過)。

+0

爲此我建議[着色DFS算法](http://www.cs.cornell.edu/courses/cs2112/2012sp/lectures/lec24/lec24-12sp.html) - 它非常簡單,讓我們您可以檢索您發現的用於輕鬆調試的週期(請參閱*檢測週期*段內的*拓撲排序*儘管在這裏看起來不需要完整的拓撲排序)。 –