使用动态引用更新类的属性

时间:2010-02-17 19:25:37

标签: asp.net vb.net properties class

对不起,这可能是一个非常基本的问题。我有一个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 个答案:

答案 0 :(得分:1)

您想使用Reflection来执行此操作。如果您在编译时知道值,VB.NET提供了一种方法,但对于运行时操作,您需要使用GetType关键字来获取类的类型(或者,使用GetType方法如果你不知道它的一个实例。)

然后,使用该Type实例,您将调用GetProperty,并使用属性的名称传递字符串。它将返回一个PropertyInfo实例,然后调用GetValue,传入对象的实例,这将返回一个对象,您必须将其转换回您想要使用的类型(如果有)。

使用CallByName函数,VB.NET可以轻松实现这一目标。

另外,如果你在编译时知道属性的名称是什么,你总是可以转换为对象并使用VB.NET固有的后期绑定:

Dim o As Object = <your object>

o.Property1 = ...

VB.NET将为您执行后期绑定。

答案 1 :(得分:1)

你会使用反射

Dim strPropertyName as string = "Property1"

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