Gambas3: Me y Super. Ejemplo de uso
En este artículos hablaremos del uso de ME y de SUPER. En la documentación oficial explica que son:
ME
Devuelve una referencia al objeto actual.
ME es obligatorio cuando quiere llamar a un método heredado, o acceder a una propiedad o heredada.
SUPER
Devuelve una referencia al objeto actual que empleará la implementación de los símbolos de la clase padre.
Como veis con ME hacemos referencia al objeto actual. Si estamos en el código del formulario, y lo queremos cerrar, usamos esta orden:
me.close()
De esta forma, estamos cerrando el formulario actual.
Ejemplo:
Os dejo un ejemplo de uso de Super y Me.
Se trata de tener dos clases, una clase padre llamada Soldado y otra que le herede llamado "SoldadoAmetralladora"
Código de la clase SoldadoAmetralladora:
me.close()
De esta forma, estamos cerrando el formulario actual.
Ejemplo:
Os dejo un ejemplo de uso de Super y Me.
Se trata de tener dos clases, una clase padre llamada Soldado y otra que le herede llamado "SoldadoAmetralladora"
Código de la clase Soldado:
' gambas class file
Public Sub dispara()
Print "me prepararo para disparar...."
Me.dibujadisparo()
End
Public Sub dibujadisparo()
Print "---- dibuja una piedra volando por la pantalla -------"
End
Public Sub dispara()
Print "me prepararo para disparar...."
Me.dibujadisparo()
End
Public Sub dibujadisparo()
Print "---- dibuja una piedra volando por la pantalla -------"
End
Código de la clase SoldadoAmetralladora:
' gambas class file
Inherits Soldado
' gambas class file
Private arma As String = "ametralladora"
Public Sub dispara()
Print "me prepararo para disparar...."
Me.dibujadisparo()
End
Public Sub dibujadisparo()
If arma = "ametralladora" Then
Print "---- dibuja disparando una ametralladora -------"
Else
Super.dibujadisparo()
Endif
End
Public Sub quitoarma()
arma = "sin ametralladora"
End
Inherits Soldado
' gambas class file
Private arma As String = "ametralladora"
Public Sub dispara()
Print "me prepararo para disparar...."
Me.dibujadisparo()
End
Public Sub dibujadisparo()
If arma = "ametralladora" Then
Print "---- dibuja disparando una ametralladora -------"
Else
Super.dibujadisparo()
Endif
End
Public Sub quitoarma()
arma = "sin ametralladora"
End
Y el programa principal:
Public Sub Form_Open()
Dim soldadotmp As New Soldado
Dim soldadoAmetralladora As New SoldadoAmetralladora
Print soldadotmp
soldadotmp.dispara()
Print SoldadoAmetralladora
SoldadoAmetralladora.dispara()
Print "--------Quito arma -----"
soldadoAmetralladora.quitoarma()
soldadoAmetralladora.dispara()
End
Dim soldadotmp As New Soldado
Dim soldadoAmetralladora As New SoldadoAmetralladora
Print soldadotmp
soldadotmp.dispara()
Print SoldadoAmetralladora
SoldadoAmetralladora.dispara()
Print "--------Quito arma -----"
soldadoAmetralladora.quitoarma()
soldadoAmetralladora.dispara()
End
Lo que hace la aplilcación es crear un la clase Soldado (soldadotmp), y luego crear otra del tipo SolddoAmetralladora (que hereda de la clase Soldado).
Cuando ejecutamos el método SoldadoAmetralladora.dispara(), ejecuta las ordenes que tiene el método dispara(). Este método llama a "dibujadisparo". Que según un el valor de la variable arma, escribe "dibuja dispara una ametralladora" o hace la llamada al método dibujadisparo() de la clase padre, usando SUPER
Resultado:
El resultado de la aplicación es este:
(Soldado 0x8879b54)
me prepararo para disparar....
---- dibuja una piedra volando por la pantalla -------
(soldadoAmetralladora 0x8879c14)
me prepararo para disparar....
---- dibuja disparando una ametralladora -------
--------Quito arma -----
me prepararo para disparar....
---- dibuja una piedra volando por la pantalla -------
Para más información:
http://gambaswiki.org/wiki/lang/me?l=es
http://gambaswiki.org/wiki/lang/super?l=es
http://gambaswiki.org/wiki/cat/object?l=es
Foro Gambas-es.org: Un Detalle De La Herencia Entre Clases Y Prioridad De Uso De Métodos