创建一个类型在字符串参数中的对象

时间:2010-02-16 12:01:06

标签: .net vb.net reflection

我有一个包含节点的TreeView。当用户单击某个节点时,应创建并显示相应的CrystalReport文档。

例如,我的节点名称是:“PeriodReport1”,“PeriodReport2”,“PeriodReport3”。我的CrystalReport文档命名相同:“PeriodReport1”,“PeriodReport2”,“PeriodReport3”。

如何创建和显示正确类型的水晶报告文档?我可以这样做:

select case reportName
    case "PeriodReport1"
        dim myReport as new PeriodReport1
    case "PeriodReport2"
        dim myReport as new PeriodReport2
    ...
end select

但可能有更好的方法来做到这一点。我可以使用反射来做到这一点吗?

4 个答案:

答案 0 :(得分:6)

只要报告有默认的无参数构造函数,即你可以说新的PeriodReport ......

Activator.CreateInstance(Type.GetType("namespace.typename"))

答案 1 :(得分:2)

这样的事情:

Type t = Type.GetType("object type name");
TBaseObj new_obj = (TBaseObj) Activator.CreateInstance(t);

答案 2 :(得分:2)

您还可以在TreeNode的tag属性中存储任何类型的对象,这对于此类事情通常很有用。它不是非常MVC,但如果您还没有尝试将模型和视图分开(Win​​Forms不鼓励您这样做),那么它可能非常合适。

答案 3 :(得分:0)

铸造怎么样?如何投射“对象”实例?像

这样的东西
string myCustomClassName = getMyCustomClassName();
var myCustomInstance = (???????)myGenericObject; //What do I replace ?????? with?