.NET容器-何时按引用和值定义成员? 我在我的编码项目中迁移了C++和VB.NET之间的关系…在VB.NET中,它偶尔会导致关于什么是按值还是按引用的混淆
比如说,我有一个MyObject数组,其中填充了一堆对象.NET容器-何时按引用和值定义成员? 我在我的编码项目中迁移了C++和VB.NET之间的关系…在VB.NET中,它偶尔会导致关于什么是按值还是按引用的混淆,.net,vb.net,list,queue,containers,.net,Vb.net,List,Queue,Containers,比如说,我有一个MyObject数组,其中填充了一堆对象 dim MyArr(5000) of MyObject 现在让我们假设来自该阵列的信息在各种数据结构中传播: dim MyList as new List(of MyObject) for i as integer = 0 to 5000 step 1000 Mylist.add(MyArr(i)) next 然后 在上述情况下,我相信一切都是参考的。如果我从“MyTable”中提取一个条目并修改其MyObject成员,我认为My
dim MyArr(5000) of MyObject
现在让我们假设来自该阵列的信息在各种数据结构中传播:
dim MyList as new List(of MyObject)
for i as integer = 0 to 5000 step 1000
Mylist.add(MyArr(i))
next
然后
在上述情况下,我相信一切都是参考的。如果我从“MyTable”中提取一个条目并修改其MyObject成员,我认为MyArr中的原始条目将被修改
然而,我也遇到过这样的情况:我认为某个东西是通过引用的,而它是通过价值的
项目是否总是通过引用添加到容器中,或者有时是通过价值添加到容器中?
我很困惑。您可以使用以下规则:若您可以将null赋值给对象,那个么它将通过引用传递。否则,它将按值传递
此规则的例外是可为空的类型和结构。它们总是按值传递。您可以使用以下规则:如果您可以将null赋值给对象,则它将按引用传递。否则,它将按值传递 此规则的例外是可为空的类型和结构。它们总是按值传递。这实际上不是“按引用”或“按值”传递。将复制传入Add方法的值。但是,对于引用类型,该值是对对象的引用-如果您通过对该对象的其他引用来操作该对象,则无论您如何访问该对象,都可以看到这些更改 如果您曾经看到数据本身的独立副本,则表明您正在使用值类型。。。但是,如果您正在进行更改,这表明您正在使用可变值类型,这是一个坏主意。值类型几乎总是不可变的,否则会导致很多混乱。(引用类型也可以是不可变的-字符串就是一个很好的例子。) 有关引用类型和值类型的更多信息,请参阅我关于和的文章。它们是从C#的角度编写的,但基本原理也适用于VB 我认为,一旦您理解了值类型值和引用之间的区别,集合将对您更有意义。这实际上不是“按引用”或“按值”的情况。将复制传入Add方法的值。但是,对于引用类型,该值是对对象的引用-如果您通过对该对象的其他引用来操作该对象,则无论您如何访问该对象,都可以看到这些更改 如果您曾经看到数据本身的独立副本,则表明您正在使用值类型。。。但是,如果您正在进行更改,这表明您正在使用可变值类型,这是一个坏主意。值类型几乎总是不可变的,否则会导致很多混乱。(引用类型也可以是不可变的-字符串就是一个很好的例子。) 有关引用类型和值类型的更多信息,请参阅我关于和的文章。它们是从C#的角度编写的,但基本原理也适用于VB
我认为,一旦您理解了值类型值和引用之间的区别,集合将对您更有意义。我认为这取决于项目的类型。不在收藏上 例如: int[]ints=新的int[10] 整数[0]=1;//-)
在这种情况下,1将被复制,只要它是ValueType。我认为这取决于项目的类型。不在收藏上 例如: int[]ints=新的int[10] 整数[0]=1;//-)
在这种情况下,1将被复制,只要它是ValueType。请不要混淆“按引用传递”和“按值传递引用”。请参阅,请不要将“按引用传递”与“按值传递引用”混淆。看,你应该告诉我们一些关于分享价值的“情况”。您的MyArray示例是正确的。您应该告诉我们一些共享是按价值进行的“情况”。你的MyArray示例是正确的。输入错误?应该是“引用类型也可以是不可变的-字符串就是一个很好的例子”打字错误?应该是“引用类型也可以是不可变的-字符串就是一个很好的例子”
dim MyTable as new HashTable
dim i as integer = 0
for each O as MyObject in Mylist
if i mod 2 = 0 then
MyTable.add(O.ToString(), O)
end if
next