Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Objektien instanssit vb.net

latesoft [24.03.2008 15:05:55]

#

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ää.

neau33 [25.03.2008 05:59:10]

#

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})

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta