views:

26

answers:

2

Sorry for what is probably a very basic question. I have a vb.net class with properties defined as follows:

    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

I can then set the values as follows:

    classname.Property1 = "myvalue" 

How do I set the value of a property that is defined dynmically eg

    Dim strPropertyName As String = "Property1"

Hope that makes sense.

Thanks, Josh

+1  A: 

You want to use Reflection in order to do this. VB.NET provides a way to do this if you know the value at compile-time, but for run-time operations, you need to use the GetType keyword in order to get the type of your class (or, use the GetType method on an instance of it if you don't know it).

Then, with that Type instance, you would call GetProperty, passing the string with the name of the property. It will return an PropertyInfo instance which you then call GetValue on, passing the instance of the object in, which will return an Object which you have to cast back to a type you wish to use (if you are).

VB.NET makes a lot of this easier with the CallByName function.

Also, if you know at compile-time what the name of the property is, you can always cast to object and use VB.NET's inherent late binding:

Dim o As Object = <your object>

o.Property1 = ...

VB.NET will perform the late-binding for you.

casperOne
I would never recomment late binding, but reflection is the way to roll.
Joel Etherton
+1  A: 

You would use reflection

Dim strPropertyName as string = "Property1"

Dim pi As PropertyInfo = myClass.GetType().GetProperty(strPropertyName)
pi.SetValue(myClass.GetType(), "some string", Nothing)
Joel Etherton