参见英文答案 >
Create an instance of a class from a string8个
在Windows应用程序中,使用C#,我有一个报告模块将依赖于类来填充报告.但是会有很多报告,我不想为每个报告编写代码. @H_301_3@流程将如此:
在报告编辑器中,报告将被分配一个类(即“应用程序”)作为一个字符串.
当用户选择要运行的报表时,代码将从SQL查询获取数据.
代码将获取数据,并找出将数据放入哪个类.
然后,报告将使用类中的数据填充报告. @H_301_3@这是我的困境,我如何使代码动态化,以便代码将转换分配的类到适当的类对象? @H_301_3@例如:
在Windows应用程序中,使用C#,我有一个报告模块将依赖于类来填充报告.但是会有很多报告,我不想为每个报告编写代码. @H_301_3@流程将如此:
在报告编辑器中,报告将被分配一个类(即“应用程序”)作为一个字符串.
当用户选择要运行的报表时,代码将从SQL查询获取数据.
代码将获取数据,并找出将数据放入哪个类.
然后,报告将使用类中的数据填充报告. @H_301_3@这是我的困境,我如何使代码动态化,以便代码将转换分配的类到适当的类对象? @H_301_3@例如:
gVar = Report; (gVar.ReportClass)oClass = new gVar.ReportClass;
解决方法
使用
Type.GetType
(特别是采用字符串参数的一个过载(例如,Type.GetType(string)
))加载相应类的“实例”,然后在该实例上使用
Activator.CreateInstance
或
Type.GetConstructor
来实例化一个实例.
@H_301_3@所以,像什么
Type type = Type.GetType(assemblyQualifiedName); object instance = Activator.CreateInstance(type);@H_301_3@请注意,您必须通过assembly qualified name,除非该类型在mscorlib或当前正在执行的程序集中. @H_301_3@另外,Activator.CreateInstance假定存在一个默认构造函数.如果没有默认构造函数,或者需要将一些参数传递给构造函数,则必须使用Activator.CreateInstance的overload,可以指定构造函数参数,或者使用Type.GetConstructor加载相应的构造函数.