我可以找出所有的BaseClass的子類的東西,如給定一個基類,我如何找到它的最特殊的子類?
var subclasses = Assembly
.GetAssembly(typeof(BaseClass))
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(BaseClass)))
現在的班,我怎麼只選擇最專業的子類?也就是說,葉節點是沒有自己的子類的節點。
我可以找出所有的BaseClass的子類的東西,如給定一個基類,我如何找到它的最特殊的子類?
var subclasses = Assembly
.GetAssembly(typeof(BaseClass))
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(BaseClass)))
現在的班,我怎麼只選擇最專業的子類?也就是說,葉節點是沒有自己的子類的節點。
subclasses.Where(c => !subclasses.Any(c2 => c == c2.BaseType))
這樣做會更快,你做一個HashSet的BaseTypes。
這隻適用於因爲BaseClass
是在同一個程序集中;否則,它會不正確地捕獲繼承自不同程序集中的中間類的中間類。
更一般的解決方案是檢查IsAssignableFrom
針對每個其他的子類。
不,至少尚未。 – shamp00