Richiamare un Metodo di un oggetto con la Classe Object

Da Gambas-it.org - Wikipedia.

E' possibile richiamare dinamicamente ed utilizzare il Metodo di un oggetto mediante il Metodo ".Call()" della Classe Object.

La sintassi è la seguente:

Object.Call ( Oggetto As Object, Metodo As String [ , Argomenti As Array ] ) As Variant

Laddove: Oggetto è l'oggetto di cui viene richiamato il Metodo che verrà indicato come stringa, e Argomenti è un array (vettore) degli argomenti previsti e passati al Metodo dell'oggetto. Se il Metodo non prevede argomenti, questo terzo parametro può essere omesso. Se gli argomenti sono più di uno e di diverso tipo, per contenerli e passarli, è possibile utilizzare un vettore di tipo "Object[]".

Il Metodo "Object.Call()" ritorna il valore previsto per quel Metodo.

Qualora tale Metodo "Object.Call()" venga utilizzato in un'applicazione a riga di comando, per richiamare le funzioni presenti nel Modulo principale il primo parametro "Object As Object " sarà la parola "Me":

Object.Call(Me, ..., ...)


Esempi pratici

Vediamo di seguito un esempio in cui viene richiamato il Metodo ".Read()" della Classe Byte[]:

Public Sub Button1_Click()

 Dim s As String
 Dim l As Long
 Dim fl As File
 Dim ff As New File[]
 Dim j As Byte

 s = "/percorso/di/un/file"

 l = Stat(s).Size

 bb = New Byte[Stat(s).Size]
   
 fl = Open s For Read
  
 ff.Add(fl)
  
 Object.Call(bb, "Read", ff)
  
 Print bb.Count
  
 For j = 0 To l - 1
   Print bb[j]
 Next

End

In quest'altro esempio, invece, l'oggetto è una Label, e verrà richiamato il suo Metodo ".Delete". Inoltre, sul Form è posto sin dall'inizio un Button:

Private lb As Label


Public Sub Form_Open()
 
 With lb = New Label(Me)
   .W = 100
   .H = 50
   .Background = Color.Yellow
 End With
   
End


Public Sub Button1_Click()

 Object.Call(lb, "Delete")

End

In questo terzo esempio viene caricato un file di testo mediante il solito Metodo ".Load()" della Classe File:

Public Sub Button1_Click()

 Dim percorsoFile, s As String
 Dim ss As New String[]

 percorsoFile = "/percorso/di/un/file/di/testo"
 
 ss.Add(percosoFile)
 
 s = Object.Call(File, "Load", ss)

 Print s

End