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 Class
UsedItemClass 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.