Differenze tra le versioni di "Gestire Funzioni come oggetti"
Riga 35: | Riga 35: | ||
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. | 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 | + | 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. | Mostriamo un esempio, nel quale si avrà un applicativo composto anche da un Modulo e da una Classe specifica, ciascuno contenente una funzione. | ||
Riga 87: | Riga 87: | ||
Print s; i | Print s; i | ||
− | + | <FONT Color=gray>' ''Chiamata di Funzione qui con il metodo "Object.Call()":''</font> | |
Object.Call(obCl, "ClSub", Null) | Object.Call(obCl, "ClSub", Null) | ||
'''End''' | '''End''' |
Versione delle 01:39, 14 lug 2015
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.
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() .
Mostriamo un semplice esempio:
Public Sub Main() Dim i As Integer Dim ob As Object ob = MMAin 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