Gestire Funzioni come oggetti
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