Richiamare un Metodo di un oggetto con la Classe Object

Da Gambas-it.org - Wikipedia.

E' possibile richiamare dinamicamente ed utilizzare un Metodo di un oggetto mediante la funzione .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. 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[].

La funzione 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