对不起,这可能是一个非常基本的问题。我有一个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"
希望这是有道理的。
谢谢, 约什
答案 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)