https://foro.gambas-es.org/viewtopic.php?f=1&t=7983&p=48022#p48022
-----------------------------------
vuott
Jueves, 23 Abril 2020, 23:07

Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
-----------------------------------
[quote user="tercoIDE" post="48018"]... un objeto sea una porcion de memoria con datos interpretables por GBX [/quote]
Exactamente, y esto lo hace el Constructor "[b][i]New[/i][/b]".
[b][i]New[/i][/b] construye las Estructuras y las sub-estructuras necesarias y previstas para dar vida al Objeto deseado, asignando la necesaria memoria.



[quote user="tercoIDE" post="48019"]Estaria bien tener un codigo universal.[/quote]
Yo propondría el siguiente ejemplo:  :| 

[u]Modulo principal[/u]
[code linenumbers=false syntax=gambas]Public Sub Main()

  Dim cl As New Class1
  Dim clone As Object
  Dim b As Byte

  clone = ClonMe(cl)

' Verificación:
  Print "Objeto \e[1mcl\e[0m = "; cl, "Objeto \e[1mclone\e[0m = "; clone
  Print "\nSus recursos:"
  For b = 0 To Object.Class(cl).Symbols.Max
    Print "Objeto cl = "; Object.Class(cl).Symbols[b]; "      "; "Objeto clone = "; Object.Class(clone).Symbols[b]
  Next

  Print clone.Adde(500)
  Print clone.Subtrahe(500)
  
End


Public Function ClonMe(original As Object) As Object

  Dim novum As Object

' Un nuevo objeto igual al original (por supuesto hace falta usar el Metodo "New"):
   novum = Object.Class(original).New(Null)

   Return novum

End[/code]


[u]Clase secundaria:  Class1.class[/u]
[code linenumbers=false syntax=gambas]Public Const VAR As Integer = 100


Public Function Adde(i As Integer) As Integer
  
  Return i + VAR
  
End


Public Function Subtrahe(i As Integer) As Integer
  
  Return i - VAR
  
End[/code]


