Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB.NET: Kopion luominen oliosta

panttu [16.08.2005 21:49:21]

#

Tässä esimerkissä on pyrittä mahdollisimman vähäisellä koodilla esittämään ja toteamaan, että oliosta on tehty kopio.

Imports System

Class K
Implements ICloneable
'IClonable rajapinta esittää clone metodin
        Public jokuArvo As Integer
        'jokuArvo muuttujaa tarvitaa todisteeksi

        Public Sub New(ByVal i As Integer)
                jokuArvo = i
        End Sub

        'Clone metodilla luodaan uusi kopio oliosta
        Public Overridable Function Clone() As Object
                'MemberwiseClone on esitelty object luokassa,
                'mutta se on suojattu (protected).
                'Tätä varten sitten tehdään Clone metodi,
                'joka on esitelty IClonable rajapinnassa.
                Return Me.MemberwiseClone
        End Function

        Public Shared Sub Main()
                'Luodaan alkuperäinen olio, jolle
                'annetaan kokeeksi arvo 7
                Dim k1 As K = New K(7)
                'Clone palauttaa object, joten
                'tarvitaan tyyppimuunnos
                Dim k2 As K = CType(k1.Clone, K)
                'Muutetaan kopion arvoa kokeeksi
                k2.jokuArvo = 10
                Console.WriteLine("k1={0} ja k2={1}", k1.jokuArvo, k2.jokuArvo)
                'tehdään testi tulostus, jotta voidaan
                'todeta olioiden olevan toisistaan riippumattomia
        End Sub
End Class

Ceez [21.08.2005 04:01:30]

#

:E

tesmu [22.08.2005 17:22:47]

#

Hassu

Puhveli [18.09.2005 14:49:34]

#

Eikös tuon voisi hoitaa ihan tavallisella sijoitusoperaatiolla? Siis, jos halutaan kopioida vaikka k(0):n tiedot k(1):een, koodi k(1) = k(0) toimii ainakin VB6:ssa. Tai sitten olen tapani mukaan misymmärtänyt jotain. :/

chin [28.09.2005 10:33:15]

#

lainaus:

Eikös tuon voisi hoitaa ihan tavallisella sijoitusoperaatiolla? Siis, jos halutaan kopioida vaikka k(0):n tiedot k(1):een, koodi k(1) = k(0) toimii ainakin VB6:ssa. Tai sitten olen tapani mukaan misymmärtänyt jotain. :/

Ei, sillon syntyy viittaus.

Vastaus

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

Tietoa sivustosta