Diferencia entre revisiones de «Programación en Vala/Funcionalidades avanzadas del lenguaje»

Contenido eliminado Contenido añadido
Sigmar (discusión | contribs.)
Sigmar (discusión | contribs.)
Línea 736:
:* Si el objeto "o" no se almacena en la clase, entonces cuando el método '''get_unowned_ref''' devuelve el valor, "o" sería un objeto sin propietario (por ejemplo no habría referencias hacia él). Si este fuera el caso, el objeto sería borrado y el método jamás devolvería una referencia válida.
:* Si el valor de retorno no se define como '''unowned''', la propiedad pasaría al nodo que ha realizado la llamada. El código de llamada está, sin embargo, esperando una referencia sin propietario ('''unowned'''), la cual no puede recibir la propiedad.
 
Si el código de llamada se escribe de la siguiente forma:
 
<source lang=csharp>
Object o = get_unowned_ref();
</source>
 
Vala intentará o bien obtener una referencia del objeto o bien una instancia duplicada a dónde apunta la referencia. En contraste a los métodos normales, las propiedades siempre devuelven valores sin propietario. Esto significa que no se puede devolver un objeto nuevo creado dentro de un método '''get''' de una propiedad. También significa que, no se puede usar una referencia con propietario como valor de retorno de una llamada a un método. Este hecho es debido a que el valor de la propiedad está asignado (es propiedad de) al objeto que tiene la propiedad. Debido a esto el siguiente código devolverá un error:
 
<source lang=chsarp>
public Object property {
get {
return new Object(); // MAL: La propiedad devuelve una referencia sin dueño,
// el objeto nuevo será borrado cuando
// el ámbito del método 'get' finalice, finalizando el código que
// ha llamada al método 'get' obteniendo una referencia a un
// objeto borrado.
}
}
</source>
 
=== Transferencia de la propiedad ===