我使用一个结构,可以将数据变量保存为对象:
Structure parse_object
Friend data As Object
End Structure
在这个数据变量中我想保存不同类型的结构 例如这一个:
Structure drive_data
Friend num_steps As UInteger
End Structure
我像这样初始化它:
Dim driveConf_comm as parse_object
Private Sub init()
driveConf_comm = new parse_object()
structure drive_data
Dim d As New drive_data()
d.num_steps = 0
driveConf_comm.data = d
End Sub
现在我想在回调中更改值'num_steps'
Private Sub cb(ByRef num_steps as UInteger)
Dim d As drive_data = DirectCast(driveConf_comm.data, drive_data)
d.num_steps = 100000
End Sub
但这不会改变变量,将d写回driveConf_comm.data:
DirectCast(driveConf_comm.data, drive_data).num_steps => 0
driveConf_comm.data = d
DirectCast(driveConf_comm.data, drive_data).num_steps => 100000
DirectCast是否克隆了我的结构?
请帮忙!
答案 0 :(得分:0)
是的,但DirectCast不应该受到指责。这就是值类型(aka结构)的工作方式。
每次将值类型分配给另一个变量或字段或属性时,都会复制结构中的值。正如您所注意到的,这意味着对副本的修改不会影响原始版本。