ByVal 如何用于 vb.net 中的对象



我的问题是关于 ByVal 在 vb.net 中工作的概念。

这是代码:

Private Sub ManipulateDetails()
Dim tObject1 as New customdatatype
tObject1.sName = "Stack"
tObject1.sLastName = "Over"
GetManipulateDetails(tObject1)
End Sub

Private Function GetManipulateDetails(ByVal tObject1 as customdatatype)
tObject1.sName = "Stack-Over-Flow"
tObject1.sLastName = "Flow-Over-Stack"
Return tObject1
End Function

在上面的代码片段中,我将 tObject1 作为 GetManipulationDetails 函数中的 ByVal 发送,当此子例程中的值更改时,返回的对象将操作传递的实际对象。即,如果我在方法ManipulationDetails中快速观察对象,我可以看到纵的细节。此外,如果我在子例程函数中返回对象,则该值将反映在传递的原始对象中。

由于即使没有从函数 GetManipulationDetails 返回对象,值也会发生变化,我很困惑这是否是因为 ByRef?? 或者有其他机制正在使这项工作。

如果我们使用不同的名称可能会更清楚:

Private Sub ManipulateDetails()
Dim tObject1 as New customdatatype
tObject1.sName = "Stack"
tObject1.sLastName = "Over"
GetManipulateDetails(tObject1)
End Sub

Private Function GetManipulateDetails(ByVal tother as customdatatype) as customdatatype
tother.sName = "Stack-Over-Flow"
tother.sLastName = "Flow-Over-Stack"
Return tother
End Function

在调用 GetManipulateDetails 之前,tObject1 是对类型 customdatatype 的对象的引用。当你打电话给GetManipulateDetails时,tother会得到一份tObject1的副本。重要的是,这意味着现在,tObject1tother都是对同一对象的引用。复制的是引用,而不是对象。在GetManipulateDetails中,它可以使用其引用的副本来访问对象并对其进行更改。

ByVal参数始终被复制 - 但参数是值类型或引用。它们本身从来都不是引用类型(也称为对象)。

最新更新