C#关于反射创建泛型类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#关于反射创建泛型类相关的知识,希望对你有一定的参考价值。

Assembly asm= Assembly.Load(AssemblyPath); //通过程序集路径动态加载程序集,该处已经成功加载了程序集。
Type t = asm.GetType("SQLServerBaseDAL.BaseDAL");//程序集的名称为SQLServerDAL,里面有一个类为BaseDAL<T>的泛型类,每次运行到这里,t的值都为null.
Type typeArgument = typeof(T);
Type constructedClass = t.MakeGenericType(typeArgument);
objType = Activator.CreateInstance(constructedClass);
请问大神是什么原因啊?
我的BaseDAL<T>是这样定义的:
namespace SQLServerBaseDAL

public class BaseDAL<T> : IBaseDAL<T> where T : class,new()

.........

你可以先使用

string fullTypeName = typeof(SQLServerBaseDAL.BaseDAL<>).FullName

看下fullTypeName是什么,然后再填到asm.GetType的参数里即可

同时你也可以注意到泛型类型的TypeName跟普通的TypeName的区别

参考技术A 编译器压根不会编译BaseDAL<T>,所以你得不到BaseDAL<T>。
C# 是强类型,所谓的泛型只是类型安全,编译时会根据你使用的BaseDAL<object/int/string>进行编译,没有BaseDAL<T>类型,有的只是具体的BaseDAL<object/int/string>类型,而且BaseDAL<object/int/string>是不一样的,道理等同于List<T>模型。

看你使用反射和泛型,想实现IOC控制反转和工厂?追问

那我想像现在这样通过加载程序集的方法来创建BaseDAL的一个实例的话应该怎样做呢?user是我自己写的一个model类

以上是关于C#关于反射创建泛型类的主要内容,如果未能解决你的问题,请参考以下文章

C#关于反射创建泛型类

java泛型——泛型类泛型方法泛型接口

java筑基.泛型,反射,注解-利用注解加反射练习

Java泛型:泛型类泛型接口和泛型方法

Java泛型:泛型类泛型接口和泛型方法

Java泛型知识点:泛型类泛型接口和泛型方法