Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 结构中的DirectCasted对象是否克隆?_Vb.net_Pointers - Fatal编程技术网

Vb.net 结构中的DirectCasted对象是否克隆?

Vb.net 结构中的DirectCasted对象是否克隆?,vb.net,pointers,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()

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

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克隆了我的结构吗


请帮忙

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


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

@Oli否,但如果您将其转换为类而不是结构,您将获得类似的引用类型语义。