是否可以使用Reflection或其他方法从该类实例的名称获取对特定类实例的引用?
例如,我开发的应用程序的框架大量使用公共类实例,例如: 公开bMyreference为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))
答案 0 :(得分: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)
一旦你拥有MyProperty,你就可以获得你的财产的价值,就像这样:
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