Получение ссылки на экземпляр класса по строковому имени - VB.NET - PullRequest
6 голосов
/ 12 марта 2010

Возможно ли использовать Reflection или какой-либо другой метод для получения ссылки на конкретный экземпляр класса по имени этого экземпляра класса?

Например, среда для приложений, которые я разрабатываю, активно использует экземпляры общедоступных классов, такие как: Публичный bMyreference as 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))

1 Ответ

8 голосов
/ 12 марта 2010

Я не знаю, хорошо ли я вас понял, но мой ответ да , вы можете сделать это с помощью размышлений. Вам нужно будет импортировать 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)

Передача методу того, что вы хотите узнать значение.

Скажите, если это разрешит ваш вопрос, пожалуйста: -)

EDIT

Это будет 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...