Я мигрирую между C ++ и VB.NET в моих проектах по кодированию ... что иногда приводит к путанице в отношении того, когда что-то является ценностью или ссылкой в VB.NET.
Скажем, например, что у меня есть массив 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
тогда
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
В вышеупомянутом сценарии я считаю, что все по ссылке. Если я извлекаю запись из «MyTable» и изменяю ее члены MyObject, я думаю, что оригинал в MyArr будет изменен.
Однако я сталкивался с ситуациями, когда я думал, что что-то было по ссылке, и это было по значению.
Всегда ли элементы добавляются в контейнеры по ссылке или иногда они добавляются по значению?
Я в замешательстве.