Это - возможное Отражение использования или некоторый другой метод для получения ссылки на определенный экземпляр класса с названия того экземпляра класса?
Например, платформа для приложений я разрабатываю в большой степени экземпляры класса общественности использования, такие как: Общественность bMyreference как MyReference = новый MyReference
Затем всюду по приложению bMyReference используется пользовательскими элементами управления и кодом.
Одним из свойств пользовательских элементов управления является "Имя поля", которое ссылается на Свойство в этих экземплярах класса (bMyReference. MyField) как строка.
То, что я хотел бы смочь сделать, анализируют эту строку "bMyReference. MyField" и затем вернулись к фактическому Экземпляру/Свойству.
В VB6 я использовал бы ОЦЕНКУ или что-то средство моделирования для преобразования строки в фактический объект, но это, очевидно, не работает в 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))
Не знаю, понял ли я вас хорошо, но мой ответ да , вы можете сделать это путем отражения. Вам нужно будет импортировать пространство имен 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