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

6 vb.net string reflection instance

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

例如,我开发的应用程序的框架大量使用公共类实例,例如:Public bMyreference as MyReference = new MyReference

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

自定义控件的一个属性是"FieldName",它将这些类实例中的Property(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))
Run Code Online (Sandbox Code Playgroud)

Jav*_*ier 8

我不知道我是否理解你,但我的回答是肯定的,你可以通过反思来做到这一点.您需要导入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)
Run Code Online (Sandbox Code Playgroud)

一旦你拥有了MyProperty,你就可以获得你的财产的价值,就像这样:

MyProperty.GetValue(MyInstance, Nothing)
Run Code Online (Sandbox Code Playgroud)

传递给你想知道价值的方法.

告诉我,如果这解决了你的问题,请:-)

编辑

这将是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
Run Code Online (Sandbox Code Playgroud)