gpt4 book ai didi

.net - .net 中的对象引用和重新分配问题

转载 作者:行者123 更新时间:2023-12-04 06:02:57 25 4
gpt4 key购买 nike

也许这是一个 n00bish 问题,但我已经习惯了 c++ 的指针和引用,这让我有点困惑。假设我在 VB.net 应用程序中有以下场景:

Dim x As New Dictionary(Of String, MyType)
'I add stuff to x
Dim y As MyObject= x("foo1")
'later...
y = New MyType()
'now y and x("foo1") don't point to the same instance anymore

情况是这样的:我有一个对象集合,在程序执行期间,可以从集合中获取任何对象以供程序的另一部分使用/编辑。现在很明显,如果我编辑对象内部的数据就没问题,但是如果我想替换对象怎么办,就像我在上面第 5 行所做的那样?我只会更改本地引用 (y) 而不会更改集合中的对象!有没有解决的办法?我怎样才能带走“对对象引用的引用”,而不仅仅是引用,所以如果我重新分配它,它也会重新分配集合中的那个?我希望我说清楚,不幸的是英语不是我的母语,要清楚:在 c++ 中,使用指向指针的指针或始终通过引用传递指向对象的指针很容易,因此调用 new 或重新分配在它上面会改变原始指针本身)

提前致谢。

最佳答案

您不能在 VB.NET(或 C#,除非通过 unsafe 代码)中使用指针。

相反,要更改分配给 y 的字典中的原始值,您需要通过字典对象本身再次访问它,而不是通过一个被切除的引用:

x("foo1") = New MyType()

原因是字典中指定位置的值 ("foo1") 被分配给 y,而不是对字典中位置本身的引用。我不太确定你为什么要使用 DataObject 类,但是 y 将在分配时保存 MyType 类型的值你的代码。给y赋新值只会改变y的值,不会改变字典中的原始值。它不知道该值。基本上可以把它想象成从字典中提取值的副本并将其放入 y 变量中。无法在字典中复制对页面的引用。

关于.net - .net 中的对象引用和重新分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4203980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com