动态实例化类 反射(Reflection)

文章讲述了如何在C#中通过动态实例化类并使用反射技术,特别关注了Type.GetType在跨程序集时可能出现的null问题,以及提供了解决方案,即在调用Type.GetType时指定完整的程序集名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态实例化类:

动态实例化类:

输入类名 系统根据类名通过反射(Reflection)动态实例化类,并返回JSON字符串


实现

 [HttpGet, Route("api/TestComm/GetTestCommJson")]
        public string GetTestCommJson([FromUri] string TableName)
        {
            // 类的全名(包括命名空间)
            string className = "Models." + TableName;

            // 使用反射获取类型信息
            Type type = Type.GetType(className + ",Models");

            // 检查类型是否存在
            if (type != null)
            {
                // 使用反射创建类的实例
                object instance = Activator.CreateInstance(type);

                // 输出实例化的对象
                return JSONHelper._ObjectToJson(instance);
            }
            else
            {
               return $"类 {className} 未找到。";
            }

        }

问题分析:

Type.GetType()在跨程序集反射时返回null:

在使用Type.GetType来进行反射的话,情况就复杂些。这是因为Type.GetType是非强类型的。Type.GetType的参数是一个string为类型的完全限定名,

如果在当前程序集中使用:

var typeFullName = “Service.Class”;
var type = Type.GetType(ClassName );

如果当string表示的目标类型不在当前程序集中,则运行时Type.GetType会返回null。


解决方案:

var typeFullName = “Service.Class”;
var type = Type.GetType(ClassName +“,Service” );//这里的Service是typeFullName 所在的程序集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

unkul

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值