代码之家  ›  专栏  ›  技术社区  ›  Josh

用动态引用更新类的属性

  •  0
  • Josh  · 技术社区  · 16 年前

    对不起,什么可能是一个非常基本的问题。我有一个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 回复  |  直到 16 年前
        1
  •  1
  •   Joel Etherton    16 年前

    你会用反省

    Dim strPropertyName as string = "Property1"
    
    Dim pi As PropertyInfo = myClass.GetType().GetProperty(strPropertyName)
    pi.SetValue(myClass.GetType(), "some string", Nothing)
    
        2
  •  1
  •   casperOne    16 年前

    您希望使用反射来完成此操作。如果您在编译时知道值,vb.net提供了一种实现此目的的方法,但是对于运行时操作,您需要使用get type关键字来获取类的类型(或者,如果您不知道的话,在它的实例上使用get type方法)。

    然后,使用该类型实例,您将调用getproperty,传递带有属性名称的字符串。它将返回一个属性信息实例,然后在该实例上调用getValue,并在其中传递该对象的实例,该实例将返回一个对象,您必须将该对象强制转换回要使用的类型(如果您是)。

    vb.net使这一切变得更容易 CallByName 功能。

    此外,如果在编译时知道属性的名称,则可以始终强制转换为对象并使用VB.NET固有的后期绑定:

    Dim o As Object = <your object>
    
    o.Property1 = ...
    

    vb.net将为您执行后期绑定。