C#反射常用操作

通过类型名字,反射获取到类型

注意:使用名字时,需要是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;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值