using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace VketCloudGUITools.Editor { public static class ReflectionExtentions { public static IEnumerable GetSubclasses(this Type type, bool includeAbstractClass = false) { return AppDomain.CurrentDomain.GetAssemblies().SelectMany(assembly => type.GetSubclassesInAssembly(assembly, includeAbstractClass)); } public static IEnumerable GetSubclassesInAssembly(this Type type, Assembly assembly, bool includeAbstractClass = false) { return assembly.GetTypes().Where(t => t.IsSubclassOf(type) && (includeAbstractClass || !t.IsAbstract)); } public static IEnumerable GetSubclassesOf(Assembly assembly, bool includeAbstractClass = false) { return typeof(T).GetSubclassesInAssembly(assembly, includeAbstractClass); } } }