您可以使用Type[] interfaces = typeof(MyClass).GetInterfaces();
來獲取類實現的所有類的列表。如何獲得一個類擴展的所有類的類型[]
我想知道是否有無論如何抓取「擴展」樹來查看類繼承的所有基類型,即抽象類等?
您可以使用Type[] interfaces = typeof(MyClass).GetInterfaces();
來獲取類實現的所有類的列表。如何獲得一個類擴展的所有類的類型[]
我想知道是否有無論如何抓取「擴展」樹來查看類繼承的所有基類型,即抽象類等?
可以使用Type.BaseType
從頂級類型遍歷到最基類型,直到基類型達到object
。
事情是這樣的:
abstract class A { }
class B : A { }
class C : B { }
public static void Main(string[] args)
{
var target = typeof(C);
var baseTypeNames = GetBaseTypes(target).Select(t => t.Name).ToArray();
Console.WriteLine(String.Join(" : ", baseTypeNames));
}
private static IEnumerable<Type> GetBaseTypes(Type target)
{
do
{
yield return target.BaseType;
target = target.BaseType;
} while (target != typeof(object));
}
我用這個代碼來獲得一個繼承的類型定義的所有類。它搜索所有加載的程序集。有用的,如果你只有基類,你會得到擴展基類的所有類。
Type[] GetTypes(Type itemType) {
List<Type> tList = new List<Type>();
Assembly[] appAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly a in appAssemblies) {
Module[] mod = a.GetModules();
foreach (Module m in mod) {
Type[] types = m.GetTypes();
foreach (Type t in types) {
try {
if (t == itemType || t.IsSubclassOf(itemType)) {
tList.Add(t);
}
}
catch (NullReferenceException) { }
}
}
}
return tList.ToArray();
}