有没有办法实现这个目标?我有一个通过查询字符串传递的类名,我想根据它创建一个新实例。
我尝试过:
Private Function Carregar() As Object
Dim bal = String.Concat("PROTBAL.", Request.QueryString("nomeBAL"))
Dim ent = Request.QueryString("nomeENT")
Dim codigo = Request.QueryString("codigo")
Dim descricao = Request.QueryString("descricao")
Dim teste = Activator.CreateInstance(Type.GetType(bal))
Return teste.Listar()
End Function
事情是变量teste
总是Nothing
。
答案 0 :(得分:1)
假设你正确地连接了类名,这应该有效:
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(bal)
修改强>
如果类型(类)可以/可能在另一个程序集中,那么这可以工作:
System.Reflection.Assembly.GetAssembly(bal).CreateInstance(bal)
但我不确定它是否会工作 - 我没有注意到名称中的点运算符 - 这是一个内部类或命名空间引用吗?我不认为你可以这样解决内部类。如果您可以在PROTBAL
上创建方法,例如CreateNewThing
,则可以取消所有这些,只需使用arg调用方法以指示您想要的类型(因为PROTBAL已知)。