AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / POO (Programación Orientada a Objetos)
  • Reglas de copia
  • Caso de Arrays al copiar instancias de clase
  • Atributos de extensión específicos
  • Función Clone
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Reglas de copia
Las variables se copian usando el operador "=".
Tipo de variablesEfecto
Tipos simples (integer, real, string, etc.)Se copia el valor de la variable.
ArraysEl array de destino es una referencia al array de origen.
Associative arraysSe copia el contenido del array.
QueueSe copia el contenido de la cola.
StackSe copia el contenido de la pila.
ListSe copia el contenido de la lista.
Object = Dynamic objectLos miembros del objeto dinámico se copian a los miembros del nuevo objeto.
Object = ObjectLos miembros del objeto de origen se copian a los miembros del objeto de destino.
Dynamic object = Dynamic objectEl objeto dinámico de destino es una referencia al objeto dinámico de origen.
Dynamic object = ObjectEl objeto dinámico de destino es una referencia al objeto de origen.
Structure = Dynamic structureSe copia la estructura. Los miembros con el mismo nombre se inicializan con los valores existentes. Los miembros que no existen se ignoran.
Structure = StructureSe copia la estructura. Los miembros con el mismo nombre se inicializan con los valores existentes. Los miembros que no existen se ignoran.
Dynamic structure = Dynamic structureLa estructura dinámica de destino es una referencia a la estructura dinámica de origen.
Dynamic structure = StructureLa estructura dinámica de destino es una referencia a la estructura de origen.
Advanced type = Advanced typeSe copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes.
Advanced type = Dynamic advanced typeSe copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes.
Dynamic advanced type = Advanced typeLa variable avanzada dinámica de destino es una referencia a la variable avanzada de origen.
Dynamic advanced type = Dynamic advanced typeLa variable avanzada dinámica de destino es una referencia a la variable avanzada dinámica de origen.

Caso de Arrays al copiar instancias de clase

Al copiar instancias de clase, todos los miembros de la clase se copian en la nueva instancia, incluyendo los arrays. Así, los arrays son independientes en todas las instancias de clase.
Para que los arrays no sean independientes en todas las instancias de clase:
  1. Abra la ventana de descripción del proyecto: en la pestaña "Proyecto", en el grupo "Proyecto", haga clic en "Descripción".
  2. En la pestaña "Compilación", deseleccione la opción "Arrays: la asignación copia el contenido".
Para obtener más información, consulte Descripción del proyecto, pestaña compilación.
Atributos de extensión específicos
Se pueden utilizar dos atributos de extensión específicos para indicar las operaciones a realizar:
  • <Copy=Clone>: cuando se utiliza en un objeto dinámico, permite forzar la clonación del objeto.
  • <Copy=False>: cuando se utiliza en un miembro, impide que se copie el valor del miembro al copiar un objeto en otro.
Función Clone
La función Clone construye una copia de una instancia de clase:
  • Se asigna un objeto de la clase base a la que pertenece la instancia.
  • Los miembros de la instancia de clase se copian a los miembros del nuevo objeto. Los métodos "Constructor" y "Destructor" también se copian.
Ventaja: En el caso del polimorfismo, ya no se requiere escribir el código necesario para la clonación. Tampoco es necesario escribir métodos virtuales en todas las clases derivadas y constructores.
Observación: La copia tiene en cuenta el atributo <Copy> de cada miembro:
  • <Copy=False> para ignorar un miembro,
  • <Copy=Clone> para realizar la clonación.
Ejemplo:
// There is a traffic light in North Phoenix, at 4725 E. Mayo Blvd.
// It is red
StopLight is TrafficLight
StopLight.Address = "4725 E. Mayo Blvd., Phoenix, AZ"
StopLight.Status = DarkRed
 
// Another traffic light must be set at 5599 on the same boulevard
 
// If the object is simply copied...
CopyLight is dynamic TrafficLight = StopLight
CopyLight.Address = "5599 E. Mayo Blvd., Phoenix, AZ"
// The address of StopLight has also changed...!
 
// If the object is cloned...
CloneLight is dynamic TrafficLight = Clone(StopLight)
// CloneLight contains the same information as StopLight
// But if one of it properties is modified, it does not affect the original traffic light
 
// Change the address
CloneLight.Address = "5599 E. Mayo Blvd., Phoenix, AZ"
// >> StopLight.Address = "4725 E. Mayo Blvd., Phoenix, AZ"
 
CloneLight.Status = DarkRed
// >> StopLight.Status = DarkGreen
Versión mínima requerida
  • Versión 25
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 14/06/2023

Señalar un error o enviar una sugerencia | Ayuda local