|
Página 1 de 2
|
Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
Autor |
Mensaje |
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
El problema:
Obtener un New objeto que sea igual que el referenciado, tanto en su clase como en todas sus variables y propiedades. O sea, un clon pero en otra posicion de memoria.
=================== "Los IF son mas rápidos" - autor anónimo
última edición por tercoIDE el Jueves, 23 Abril 2020, 16:42; editado 1 vez
|
#1 Jueves, 23 Abril 2020, 16:42 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
tercoIDE:
Mirate esto: http://sologambas.blogspot.com/2014...ar-objetos.html
A ver si te sirve...
Saludos
Julio
|
#2 Jueves, 23 Abril 2020, 19:16 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
jsbsan escribió:
Yo supongo que no: ... tercoIDE en estos días está de humor para refinamientos "excesivos".
última edición por vuott el Jueves, 23 Abril 2020, 19:57; editado 3 veces
|
#3 Jueves, 23 Abril 2020, 19:31 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
tercoIDE escribió: El problema:
Obtener un New objeto que sea igual que el referenciado, tanto en su clase como en todas sus variables y propiedades. O sea, un clon pero en otra posicion de memoria.
Me parece que tú quieres obtener, crear un Objeto "c5" pero sin la sintaxis " As New .....", sino obteniéndolo del Objeto pasado a la función, como modelo, como base.
De todos modos yo te respondo con otra pregunta: ¿desde el punto de vista del bajo nivel, qué significa crear un Objeto, una instancia de una Clase?
última edición por vuott el Jueves, 23 Abril 2020, 19:44; editado 1 vez
|
#4 Jueves, 23 Abril 2020, 19:42 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
jsbsan escribió: tercoIDE:
Mirate esto: http://sologambas.blogspot.com/2014...ar-objetos.html
A ver si te sirve...
Saludos
Julio
No funciono porque la clase tiene un array de otro clase menor
La variable P es un array de clase Punto. La rutina que me pasaste no puede procesar eso.
=================== "Los IF son mas rápidos" - autor anónimo
|
#5 Jueves, 23 Abril 2020, 20:29 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
vuott escribió: [
Me parece que tú quieres obtener, crear un Objeto "c5" pero sin la sintaxis "As New .....", sino obteniéndolo del Objeto pasado a la función, como modelo, como base.
De todos modos yo te respondo con otra pregunta: ¿desde el punto de vista del bajo nivel, qué significa crear un Objeto, una instancia de una Clase?
Quiero crear una nueva instancia de un objeto del cual no conozco la clase y copiar todo el contenido.
No se como trabaja internamente gambas, pero tal vez un objeto sea una porcion de memoria con datos interpretables por GBX y tal vez, solo tal vez pueda ser copiado como eso, una porcion de memoria y asignada a un puntero de un objeto nuevo...tal vez...habria que meter la cabeza en el agujero como tu avestruz
=================== "Los IF son mas rápidos" - autor anónimo
|
#6 Jueves, 23 Abril 2020, 20:33 |
|
|
tercoIDE
Analista Programador
Registrado: Noviembre 2013
Mensajes: 713
Edad: 54
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
tercoIDE escribió:
La variable P es un array de clase Punto. La rutina que me pasaste no puede procesar eso.
Este codigo funciona para mi caso particular. Pero tengo que meter los puntos a mano.
Estaria bien tener un codigo universal.
Public Sub Clone(hObjeto As Object) As Object
Dim SinPuntos As Object
SinPuntos = CopyElementObject(hObjeto)
' ahora meto los puntos a mano
Dim p2 As Punto
For Each p2 In hObjeto.p
SinPuntos.P.add(puntos.Add(p2.x, p2.z, p2.Level))
Next
SinPuntos.finish()
Return SinPuntos ' pero ahora tiene :)
End
Public Sub CopyElementObject(hObjeto As Object) As Object
Dim hNewMe As Object = Object.New(Object.Type(hObjeto)) 'se genera un objeto de la mismo tipo que nos pasan
Dim s As String 'variable utilizada para almacenar el valor de hclass.symbols
Dim hclass As Class = Object.Class(hObjeto) 'contiene el valor de la clase del objeto
Dim hChild As Object
Dim nuevoObjeto As Object
Dim caso As Integer 'tipo de dato de la propiedad del objeto
Dim contador, a As Integer 'para usarlo en bucle si son arrays
Dim arrayPosible As Object
'Inicio de la copia de las propiedades....
For Each s In hclass.Symbols
If s = "Chlidren" Then Continue
If Not hclass[s].ReadOnly Then ' esto se cumple cuando llego a P[0]
caso = TypeOf(Object.GetProperty(hObjeto, s))
Select Case caso
Case gb.Object
'la propiedad es un objeto, vuelvo a llamar a la funcion para que me extraiga los valores y no las referencias
nuevoObjeto = CopyElementObject(Object.GetProperty(hObjeto, s))
Object.SetProperty(hNewMe, s, nuevoObjeto)
Try contador = Object.GetProperty(hObjeto, s).count
If Error Then
'no es un array
Else
For a = 0 To contador - 1
nuevoObjeto.add(Object.GetProperty(hObjeto, s)[a])
Next
Endif
Default
'la propiedad no es un objeto, copio el valor
Object.SetProperty(hNewMe, s, Object.GetProperty(hObjeto, s))
End Select
Endif
Next
Return hNewMe
End
=================== "Los IF son mas rápidos" - autor anónimo
|
#7 Jueves, 23 Abril 2020, 21:22 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
tercoIDE escribió: El problema:
Obtener un New objeto que sea igual que el referenciado, tanto en su clase como en todas sus variables y propiedades. O sea, un clon pero en otra posicion de memoria.
Los objetos collection se pueden copiar.
Por ejemplo.
Saludos.
|
#8 Jueves, 23 Abril 2020, 22:31 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
Esta función podria servir
Saludos.
|
#9 Jueves, 23 Abril 2020, 22:35 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Clases: Como Clonar Un Object De Una Clase Que No Conocemos?
tercoIDE escribió: ... un objeto sea una porcion de memoria con datos interpretables por GBX
Exactamente, y esto lo hace el Constructor " New".
New construye las Estructuras y las sub-estructuras necesarias y previstas para dar vida al Objeto deseado, asignando la necesaria memoria.
tercoIDE escribió: Estaria bien tener un codigo universal.
Yo propondría el siguiente ejemplo:
Modulo principal
Clase secundaria: Class1.class
última edición por vuott el Viernes, 24 Abril 2020, 05:35; editado 3 veces
|
#10 Jueves, 23 Abril 2020, 23:07 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|