https://foro.gambas-es.org/viewtopic.php?f=1&t=5904&p=35207#p35207
-----------------------------------
shordi
Lunes, 31 Octobre 2016, 11:30

Re: Definir Propiedades O Atributos De Un Objeto
-----------------------------------
[quote]Cierto,  todo el constructor entero es opcional.[/quote]
No si quieres hacer software de calidad. Uno de los objetivos de la POO es "blindar" la clase contra errores. El constructor tiene mucho que ver en eso. Es la oportunidad de inicializar valores, levantar flags, etc. etc. antes de que la cosa se ponga en marcha. Así con éste constructor:
[code linenumbers=false syntax=gambas]
Public Sub _new(Optional cx As Integer, Optional cy As Integer, Optional iancho As Integer, Optional ialto As Integer, Optional jugador As String)

If cx Then
    $x = cx
else 
    $x=0
Endif
If cy Then
    y = cy
else
    $y=0
Endif
if iancho then
   $ancho=iancho
else
   $ancho=10
endif
if ialto then
   $alto=ialto
else
   $alto=10
endif
etc..
[/code]
Tienes las tres posibilidades: Crear la celda pasando parámetros en la misma línea. Crear la celda y luego pasarle los valores o crear la celda y dejar que se dibuje sola
Si eliminas el constructor ¿cómo vas a pasar los valores a las variables internas del control? Eso es convertir la clase en una función...

Hay otra posibilidad: Imagina que las celdas, por defecto, son cuadradas, aunque te reservas el derecho de hacerlas rectangulares. Entonces:

[code linenumbers=false syntax=gambas]
Public Sub _new(Optional cx As Integer, Optional cy As Integer, Optional iancho As Integer, Optional ialto As Integer, Optional jugador As String)

If cx Then
    $x = cx
else 
    $x=0
Endif
If cy Then
    y = cy
else
    $y=0
Endif
if iancho then
   me.ancho=iancho 'aquí cambia la cosa al colocar me. disparas el evento ancho_write
else
   me.ancho=10 'aquí también
endif
if ialto then
   me.alto=ialto  'lo mismo que para el ancho
else
   me.alto=10
endif
etc..
etc..
end
Private sub ancho_write(Value as integer)
$ancho=Value
if $alto=0 then $alto=$ancho
end
Private sub alto_write(Value as integer)
$alto=Value
if $ancho=0 then $ancho=$alto
end
[/code]

Así te aseguras que las celdas sean cuadradas, cuando mínimo solo con pasar uno de los valores.
El constructor [i]es[/i] importante...

Saludos


