обновление свойств класса с помощью динамических ссылок - PullRequest
0 голосов
/ 17 февраля 2010

Извините за то, что, вероятно, очень простой вопрос. У меня есть класс vb.net со свойствами, определенными следующим образом:

    Private m_Property1 As String
    Public Property Property1() As String
        Get
            Return m_Property1 
        End Get
        Set(ByVal value As String)
            If IsNothing(value) Then
                m_Property1 = String.Empty
            Else
                m_Property1 = value
            End If
        End Set
    End Property

Затем я могу установить значения следующим образом:

    classname.Property1 = "myvalue" 

Как установить значение свойства, которое определяется динмически, например,

    Dim strPropertyName As String = "Property1"

Надеюсь, что это имеет смысл.

Спасибо, Джош

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Вы бы использовали отражение

Dim strPropertyName as string = "Property1"

Dim pi As PropertyInfo = myClass.GetType().GetProperty(strPropertyName)
pi.SetValue(myClass.GetType(), "some string", Nothing)
1 голос
/ 17 февраля 2010

Вы хотите использовать Reflection, чтобы сделать это. VB.NET предоставляет способ сделать это, если вы знаете значение во время компиляции, но для операций во время выполнения вам нужно использовать ключевое слово GetType, чтобы получить тип вашего класса (или использовать метод GetType в пример этого, если вы этого не знаете).

Затем, с этим экземпляром Type, вы вызываете GetProperty, передавая строку с именем свойства. Он вернет экземпляр PropertyInfo, который вы затем вызовете GetValue, передав экземпляр объекта, который вернет объект, который вы должны привести к типу, который вы хотите использовать (если вы это делаете).

VB.NET делает многое из этого проще с помощью функции CallByName .

Кроме того, если во время компиляции вы знаете, как называется свойство, вы всегда можете привести к объекту и использовать внутреннюю позднюю привязку VB.NET:

Dim o As Object = <your object>

o.Property1 = ...

VB.NET выполнит для вас позднюю привязку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...