我有一個包含有一個共同的祖先類(在組件內定義的類型的組件。該共同的祖先是在大多數情況下不類的直接基類型。使用.NET反射找到一個共同的祖先類
我需要能夠從此程序集中的所有類型中篩選出具有此共同祖先的類型。出於各種原因,我不能實例化類型(它們不作爲規則具有共同的構造函數簽名),所以我有從myAssembly.GetTypes()
開始,並檢查類型本身的屬性,換句話說,我必須使用類,而不是類的實例
如何檢查此集合中的每個類型以查找它是否從所需的共同祖先繼承?
後來:不用擔心,我現在擁有它。訣竅是實例化一個類型的對象,它是從組件祖先類型,如
Type ancestor = assy.getType("myAncestorClassName", true, true);
Type[] interestingClasses = assy.GetTYypes().Where(t => t.IsSubclassOf(ancestor));
然而,這是行不通的:
Type[] interestingClasses = assy.GetTYypes().Where(t => t.IsSubclassOf(typeof(AncestorClass)));
,因爲,我認爲,祖先類型定義在另一個組件中,而不是在主組件中。
很多很久以後....感謝所有爲此提供答案的人。我一直在轉向別的東西,但我現在有一個很好的解決方案(並且學到了新的東西)。
你只是建立一個通過它們的直接BaseType連接的類型的樹,它本身是一個類型...在根上只有一個節點 - 它是所有類型的'對象',並且一切都繼承... – Yahia 2012-02-09 12:42:33