Advertisement
jsbsan

Copia de objetos

Aug 3rd, 2013
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
GAMBAS 1.62 KB | None | 0 0
  1.  
  2. Public Sub CopyObject(hObjeto As Object) As Object
  3.  
  4.   Dim hNewMe As Object = Object.New(Object.Type(hObjeto)) 'se genera un objeto de la mismo tipo  que nos pasan
  5.   Dim s As String    'variable utilizada para almacenar el valor de hclass.symbols
  6.   Dim hclass As Class = Object.Class(hObjeto) 'contiene el valor de la clase del objeto
  7.   Dim hChild As Object
  8.  
  9.   Dim nuevoObjeto As Object
  10.   Dim caso As Integer 'tipo de dato de la propiedad del objeto
  11.  
  12.   Dim contador, a As Integer 'para usarlo en bucle si son arrays
  13.   Dim arrayPosible As Object
  14.  
  15.   'Inicio de la copia de las propiedades....
  16.   For Each s In hclass.Symbols
  17.     If s = "Chlidren" Then Continue
  18.     If Not hclass[s].ReadOnly Then
  19.       caso = TypeOf(Object.GetProperty(hObjeto, s))
  20.      
  21.       Select Case caso
  22.         Case gb.Object
  23.           'la propiedad es un objeto, vuelvo a llamar a la funcion para que me extraiga los valores y no las referencias
  24.           nuevoObjeto = CopyObject(Object.GetProperty(hObjeto, s))
  25.           Object.SetProperty(hNewMe, s, nuevoObjeto)  
  26.          
  27.           Try contador = Object.GetProperty(hObjeto, s).count
  28.           If Error Then
  29.             'no es un array
  30.            
  31.           Else
  32.             For a = 0 To contador - 1
  33.               nuevoObjeto.add(Object.GetProperty(hObjeto, s)[a])
  34.             Next
  35.           Endif
  36.          
  37.         Default
  38.           'la propiedad no es un objeto, copio el valor
  39.           Object.SetProperty(hNewMe, s, Object.GetProperty(hObjeto, s))        
  40.       End Select
  41.      
  42.     Endif
  43.    
  44.   Next
  45.  
  46.   'devuelvo la copia del objeto
  47.   Return hNewMe
  48.  
  49. End
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement