【问题标题】:Create an object whose type is in a string parameter创建一个类型为字符串参数的对象
【发布时间】:2010-02-16 12:01:06
【问题描述】:

我有一个包含节点的 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

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

【问题讨论】:

标签: .net vb.net reflection


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    类似这样的:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        铸造呢?如何投射“对象”实例?类似的东西

        string myCustomClassName = getMyCustomClassName();
        var myCustomInstance = (???????)myGenericObject; //What do I replace ?????? with?
        

        【讨论】:

          猜你喜欢
          • 2011-09-29
          • 1970-01-01
          • 2013-06-27
          • 2018-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-14
          • 1970-01-01
          相关资源
          最近更新 更多