예제 #1
0
 /// <summary>
 /// A convenient method for calling the above.
 /// Example usage:
 ///     List<System.Type> subTypes = EditorUtility.FindDerivedTypes(typeof(BaseTimelineEvent)).ToList();
 /// </summary>
 /// <param name="baseType"></param>
 /// <param name="classOnly"></param>
 /// <returns></returns>
 public static System.Type[] FindDerivedTypes(System.Type baseType, bool classOnly = true)
 {
     //return FindDerivedTypesFromAssembly(System.Reflection.Assembly.GetAssembly(baseType), baseType, classOnly);
     System.Type[] result = new System.Type[0];
     foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies())
     {
         result = result.Concat(FindDerivedTypesFromAssembly(assembly, baseType, classOnly)).ToArray();
     }
     return(result);
 }
예제 #2
0
        /// <summary>
        /// A convenient method for calling the above, but for ALL assemblies.
        /// Example usage:
        ///     List<System.Type> subTypes = EditorUtility.FindDerivedTypes(typeof(BaseTimelineEvent)).ToList();
        /// </summary>
        /// <param name="baseType"></param>
        /// <param name="classOnly"></param>
        /// <returns></returns>
        public static System.Type[] FindDerivedTypes(System.Type baseType, bool classOnly = true)
        {
#if UNITY_2019_2_OR_NEWER
            var results = TypeCache.GetTypesDerivedFrom(baseType).ToArray();
            if (classOnly)
            {
                return(results.Where(x => x.IsClass).ToArray());
            }
            else
            {
                return(results.ToArray());
            }
#else
            System.Type[] typeArray = new System.Type[0];
            var           retval    = typeArray.Concat(typeArray);
            foreach (var assem in System.AppDomain.CurrentDomain.GetAssemblies())
            {
                retval = retval.Concat(FindDerivedTypesFromAssembly(assem, baseType, classOnly));
            }
            return(retval.ToArray());
#endif
        }