结构中的DirectCasted对象是否被克隆?

时间:2011-12-17 00:48:28

标签: vb.net pointers

我使用一个结构,可以将数据变量保存为对象:

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是否克隆了我的结构?

请帮忙!

1 个答案:

答案 0 :(得分:0)

是的,但DirectCast不应该受到指责。这就是值类型(aka结构)的工作方式。

每次将值类型分配给另一个变量或字段或属性时,都会复制结构中的值。正如您所注意到的,这意味着对副本的修改不会影响原始版本。