Differenze tra le versioni di "Gestire Funzioni come oggetti"
Riga 6: | Riga 6: | ||
====Esempio in ambiente grafico==== | ====Esempio in ambiente grafico==== | ||
− | Mostriamo un semplice esempio con applicazione in ambiente ''grafico'' | + | Mostriamo un semplice esempio con applicazione in ambiente ''grafico'': |
'''Public''' Sub Form_Open() | '''Public''' Sub Form_Open() | ||
Versione delle 10:51, 27 mar 2016
Funzioni e Procedure, presenti in Moduli o in Classi specifiche, possono essere gestite e chiamate come oggetti, siano esse interne alla medesima Classe (o Modulo) di quella della funzione chiamante, oppure poste in una Classe (o Modulo) diversa da quella della funzione chiamante.
Indice
Funzioni e Procedure poste all'interno della medesima Classe o Modulo della funzione chiamante
Si tratta di assegnare il nome identificativo della Funzione o della Procedura ad una variabile di tipo Oggetto, con la quale effettuare la chiamata con il metodo Object.Clall() .
Esempio in ambiente grafico
Mostriamo un semplice esempio con applicazione in ambiente grafico:
Public Sub Form_Open() Dim i As Integer Dim ob As Object ob = FMain ' E' possibile usare anche "Me" anziché FMain i = Object.Call(ob, "Somma", [3, 4]) Print i End Public Function Somma(a As Integer, b As Integer) As Integer ' <--- La Funzione deve essere dichiarata come "Pubblica" Dim i As Integer i = a + b Return i End
Esempio con applicazione a riga di comando
Mostriamo un semplice esempio con applicazionea riga di comando:
Public Sub Main() Dim i As Integer Dim ob As Object ob = Me i = Object.Call(ob, "Somma", [3, 4]) Print i End Public Function Somma(a As Integer, b As Integer) As Integer ' <--- La Funzione deve essere dichiarata come "Pubblica" Dim i As Integer i = a + b Return i End
Funzioni e Procedure poste in altra Classe o Modulo
Il Modulo o la Classe specifica deve avere, come intestazione, la parola chiave "Create". Inoltre, le Funzioni e le Procedure, presenti in Moduli o in Classi specifiche, saranno rappresentate dal metodo speciale _call(), che viene appunto dichiarato quando l'oggetto è usato come una funzione.
Le Funzioni e Procedure presenti in una Classe specifica possono essere chiamate anche mediante il metodo Object.Call(). In tal caso non si utilizzerà il metodo speciale _call() . La chiamata di Funzioni e Procedure possono essere effettuate con il metodo Object.Call() anche se esse sono presenti in un Modulo; ma in tal caso non deve essere presente nel Modulo la parola chiave "Create".
Mostriamo un esempio, nel quale si avrà un applicativo composto anche da un Modulo e da una Classe specifica, ciascuno contenente una funzione.
Il Modulo, che chiamaremo Module1, sarà così scritto:
Create Public Function _call(i As Integer) As Integer Return i * 10 End
La Classe specifica, che chiameremo Class1, sarà così scritta:
Create Public Function _call(s As String) As String Return s & " 10 = " End Public Procedure ClSub() Print "Procedura chiamata con 'Object.Call()'" End
Mentre la Classe principale dell'applicativo sarà la seguente:
Public Sub Form_Open() Chiamata(Class1, Module1) End Public Procedure Chiamata(obCl As Object, obMod As Object) Dim i As Integer Dim s As String s = obCl("7 x") i = obMod(7) Print s; i ' Chiamata di Funzione qui con il metodo "Object.Call()": Object.Call(obCl, "ClSub", Null) End