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:E
Hassu
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. :/
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.