vb.net - 通过字符串名称获取对类实例的引用 - VB.NET

标签 vb.net string reflection instance

是否可以使用反射或其他方法从该类实例的名称中获取对该特定类实例的引用?

例如,我开发的应用程序框架大量使用公共(public)类实例,例如:
公共(public) bMyreference 作为 MyReference = new MyReference

然后在整个应用程序中 bMyReference 被自定义控件和代码使用。

自定义控件的属性之一是“FieldName”,它将这些类实例 (bMyReference.MyField) 中的属性作为字符串引用。

我想做的是分析这个字符串“bMyReference.MyField”,然后引用实际的实例/属性。

在 VB6 中,我会使用 EVAL 或类似的东西将字符串转换为实际对象,但这显然在 VB.net 中不起作用

我所描绘的是这样的

Dim FieldName as String = MyControl.FieldName ' sets FielName to bMyReference.MyField

Dim FieldObject() as String = FieldName.Split(".") ' Split into the Object / Property

Dim myInstance as Object = ......... ' Obtain a reference to the Instance and set as myInstance

Dim myProperty = myInstance.GetType().GetProperty(FieldObject(1))

最佳答案

我不知道我是否理解你,但我的回答是肯定的,你可以通过反射(reflection)来做到这一点。您需要导入 System.Reflection命名空间。

这是一个例子:

    ' Note that I´m in namespace ConsoleApplication1
    Dim NameOfMyClass As String = "ConsoleApplication1.MyClassA"
    Dim NameOfMyPropertyInMyClass As String = "MyFieldInClassA"

    ' Note that you are getting a NEW instance of MyClassA
    Dim MyInstance As Object = Activator.CreateInstance(Type.GetType(NameOfMyClass))

    ' A PropertyInfo object will give you access to the value of your desired field
    Dim MyProperty As PropertyInfo = MyInstance.GetType().GetProperty(NameOfMyPropertyInMyClass)

一旦你有了 MyProperty,你就可以得到你的属性(property)的值(value),就像这样:
MyProperty.GetValue(MyInstance, Nothing)

将您想知道的值的实例传递给方法。

告诉我这是否解决了您的问题,请:-)

编辑

这将是 ClassA.vb
Public Class MyClassA

    Private _myFieldInClassA As String

    Public Property MyFieldInClassA() As String
        Get
            Return _myFieldInClassA
        End Get
        Set(ByVal value As String)
            _myFieldInClassA = value
        End Set
    End Property

End Class

关于vb.net - 通过字符串名称获取对类实例的引用 - VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434530/

相关文章:

VB.Net Linq 到实体空值比较 - 'Is Nothing' 或 '= Nothing' ?

regex - 如何替换 nginx 变量字符串中的字符?

c# - 向打印机发送转义字符

c - C 中随机名称按字母顺序排序

java - 在运行时构造一个函数

python - 如何检查缺少的属性?

c# - 使用自定义属性获取所有字段 - 包括继承的字段

c# - 有没有办法在运行时构建新类型?

c# - ASP.NET 自动将 & 转换为 &

vb.net - 在图片框中快速加载图像