Kaksi ongelmaa:
1.
Class UsedItemClass
sub new()
end sub
end class
Class ItemCreator
dim StoredItem as new UsedItemClass
sub new()
end sub
function GetStoredItem() as UsedItemClass
return StoredItem
end function
end class
Class ItemReader
dim StoredItem as UsedItemClass
sub new()
Dim TempCreator as new ItemCreator()
StoredItem = TempCreator.GetStoredItem()
end sub
End ClassUsedItemClass voisi olla myös structure, jonka kanssa syntyy myös allaoleva ongelma.
Mistä ihmeestä tiedän, palautetaanko StoredItem referenssinä (pointerina tms. minä nyt kukin asiat ymmärtää), vai ihan omana uutena kopiona. Tuntuu, että joistain luokista tulee kopioita ja joistain referenssejä, ilman vaikutusmahdollisuutta. Esim List(Of) luokat luovat referenssejä jos niitä yrittää viedä paikasta A paikkaan B.
Miten tähän käyttäytymiseen voi vaikuttaa ohjelmoitaessa? Miten voin luoda itse luokan, joka palauttaa itsestään aina referenssin, tai luokan, joka aina kopioituu?
2.
Dim BunchOfItems as List(Of StructureX) For Each ListItem as Var in BunchOfItems End For
Yleinen tapa käsitellä listauksia. Mutta ilmeisesti liittyen kohtaan 1., välillä ListItem on readonly, joskus se on referenssi, joskus se on kopio (Riippuen mistä aineksista listaus on tehty).
Varsinkin ReadOnly ListItem ärsyttää, koska mitä hyötyä on löytää listauksesta kohta, jota ei voi muokata?
Kaikkein hyödyllisimmillään For Each komento on silloin, kun ListItem on referenssi listauspakassa olevaan kohtaan. Mutta sitäpä kun ei voi määrittää.
Heippa latesoft!
1. & 2. Jotenkin tuntuisi loogiselta, että avainsanalla new on jotain tekemistä return kopio vaiko eikö....List(OF entryType, keyType As {IComparable, IFormattable, New})
Aihe on jo aika vanha, joten et voi enää vastata siihen.