- Reglas de copia
- Caso de Arrays al copiar instancias de clase
- Atributos de extensión específicos
- Función Clone
Las variables se copian usando el operador "=". | | Tipo de variables | Efecto |
---|
Tipos simples (integer, real, string, etc.) | Se copia el valor de la variable. | Arrays | El array de destino es una referencia al array de origen. | Associative arrays | Se copia el contenido del array. | Queue | Se copia el contenido de la cola. | Stack | Se copia el contenido de la pila. | List | Se copia el contenido de la lista. | Object = Dynamic object | Los miembros del objeto dinámico se copian a los miembros del nuevo objeto. | Object = Object | Los miembros del objeto de origen se copian a los miembros del objeto de destino. | Dynamic object = Dynamic object | El objeto dinámico de destino es una referencia al objeto dinámico de origen. | Dynamic object = Object | El objeto dinámico de destino es una referencia al objeto de origen. | Structure = Dynamic structure | Se copia la estructura. Los miembros con el mismo nombre se inicializan con los valores existentes. Los miembros que no existen se ignoran. | Structure = Structure | Se 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 structure | La estructura dinámica de destino es una referencia a la estructura dinámica de origen. | Dynamic structure = Structure | La estructura dinámica de destino es una referencia a la estructura de origen. | Advanced type = Advanced type | Se copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes. | Advanced type = Dynamic advanced type | Se copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes. | Dynamic advanced type = Advanced type | La variable avanzada dinámica de destino es una referencia a la variable avanzada de origen. | Dynamic advanced type = Dynamic advanced type | La 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: - Abra la ventana de descripción del proyecto: en la pestaña "Proyecto", en el grupo "Proyecto", haga clic en "Descripción".
- 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.
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
Esta página también está disponible para…
|
|
|
|