【问题标题】:How to write Dynamic VB.net code?如何编写动态 VB.net 代码?
【发布时间】:2010-11-27 09:41:34
【问题描述】:

例如,我有一个类,它有自己的属性,我将类的名称和要调用的属性的名称传递给函数

比如说 exp 是我传递的变量,它包含一个值 = "ClassA,Property1"

           Function Property2BCalled(byval exp as String)

            dim classname = split(exp,",")(0)
            dim propertyname=split(exp,",")(1)
            dim value= classname.propertyname

           End Function

我想做类似的事情,如上所述。

【问题讨论】:

  • 很少有这种事情是个好主意的情况,它通常保留给需要变通方法来执行代理或对象创建的框架。你为什么要这样做?
  • 这听起来很疯狂,我在 asp.net mvc 中执行单元测试时遇到了本地化问题,因为它抛出了一个错误,即找不到 app_globalresources 文件夹的虚拟路径,我无法模拟它,所以我所做的是将所有资源转储到一个普通文件夹中,然后从那里访问它,但是,现在我需要编写一个 if/else 或选择案例来运行资源文件,即我从哪个资源文件需要获取信息。所以我想到了这样做的想法。

标签: .net vb.net reflection dynamic expression-trees


【解决方案1】:

您可以使用反射来执行此任务。 请记住,反射很慢,但可以做到。 您将枚举程序集中可用的类,当您找到名称匹配时,然后枚举属性,然后调用方法/属性等。

但最好定义一个接口,然后有一个可以与您的项目进行通信的通用签名,然后您所需要的只是一个工厂抽出您的数据中出现的类的适当实例。

【讨论】:

  • 如何获取要发送类字符串名称的类的类型? dim a as string= GetType(className).getProperty("").Getvalue("",Nothing).Tostring() 将给我类型,但我也将类的名称作为字符串发送
  • For Each t As Type In [Assembly].GetExecutingAssembly.GetTypes() If t.Name = "yourclassname" Then end if next
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多