通过类型名字,反射获取到类型
注意:使用名字时,需要是FullName,即需要包括命名空间
// 反射自定义class
// 第一种
//Assembly assembly = Assembly.Load("Assembly-CSharp");
//Type type = assembly.GetType("MVVM.VM_View");
// 第二种
//Type type = Type.GetType("MVVM.VM_View");
// 反射UnityEngine class
// 第一种
Assembly assembly = Assembly.Load("UnityEngine.UI");
Type type = assembly.GetType("UnityEngine.UI.Image");
//assembly = Assembly.Load("UnityEngine");
//type = assembly.GetType("UnityEngine.Component");
// 第二种 只要编译过的class都可以
type = typeof(UnityEngine.UI.Image);
通过反射 获取工程中全部的,派生自指定基类的实例
/// <summary>
///通过反射 获取工程中全部的,派生自指定基类的实例(须包含无参构造,不包括基类)
/// </summary>
/// <typeparam name="T">指定基类</typeparam>
/// <returns></returns>
public static List<T> GetClassInsBySuperType<T>()
{
var type = typeof(T);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var allTypes = assemblies.SelectMany(s => s.GetTypes());
var allChildClass = allTypes.Where(t => ((t != type) && type.IsAssignableFrom(t)));
var allIns = allChildClass.Select(t => (T)Activator.CreateInstance(t)).ToList();
return allIns;
}