Differenze tra le versioni di "Richiamare un Metodo di un oggetto con la Classe Object"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
E' possibile richiamare dinamicamente ed utilizzare un Metodo di un oggetto mediante la funzione ''.Call()'' della Classe ''Object''.
+
E' possibile richiamare dinamicamente ed utilizzare il Metodo di un oggetto mediante il Metodo "<B>.Call()</b>" della Classe ''Object''.
  
 
La sintassi è la seguente:
 
La sintassi è la seguente:
 
  Object.Call ( Oggetto As Object, Metodo As String [ , Argomenti As Array ] ) As Variant
 
  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[]''.
+
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[]".
  
La funzione ''Object.Call()'' ritorna il valore previsto per quel Metodo.
+
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''":
+
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, ..., ...)''
 
  ''Object.Call(Me, ..., ...)''
  
  
 
===Esempi pratici===
 
===Esempi pratici===
Vediamo di seguito un esempio in cui viene richiamato il Metodo ''.Read()'' della Classe Byte[]:
+
Vediamo di seguito un esempio in cui viene richiamato il Metodo ".Read()" della Classe Byte[]:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
Riga 20: Riga 20:
 
   Dim ff As New File[]
 
   Dim ff As New File[]
 
   Dim j As Byte
 
   Dim j As Byte
 
 
 
   
 
   
  s = "''/percorso/di/un/file''"
+
  s = "<FONT color=gray>''/percorso/di/un/file''</font>"
 +
 +
  l = Stat(s).Size
 
   
 
   
  l = Stat(s).Size
+
   bb = New Byte[Stat(s).Size]
    
 
  bb = New Byte[Stat(s).Size]
 
   
 
  fl = Open s For Read
 
   
 
  ff.Add(fl)
 
   
 
  <FONT color=#B22222>Object.Call(bb, "Read", ff)</font>
 
   
 
  Print bb.Count
 
 
      
 
      
   For j = 0 To l - 1
+
  fl = Open s For Read
    Print bb[j]
+
 
  Next
+
  ff.Add(fl)
 +
 
 +
  <FONT color=#B22222>Object.Call(bb, "Read", ff)</font>
 +
    
 +
  Print bb.Count
 +
 
 +
  For j = 0 To l - 1
 +
    Print bb[j]
 +
  Next
 
   
 
   
 
  '''End'''
 
  '''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
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
 
 
   
 
   
 
   
 
   
Riga 56: Riga 53:
 
      
 
      
 
  '''End'''
 
  '''End'''
 
 
   
 
   
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
  <FONT color=#B22222>Object.Call(lb, "Delete")</font>
+
  <FONT color=#B22222>Object.Call(lb, "Delete")</font>
 
   
 
   
 
  '''End'''
 
  '''End'''
 
+
In questo terzo esempio viene caricato un file di testo mediante il solito Metodo ".Load()" della Classe ''File'':
 
 
In questo terzo esempio viene caricato un file di testo mediante il solito metodo ''.Load()'' della Classe ''File'':
 
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
Riga 71: Riga 65:
 
   Dim ss As New String[]
 
   Dim ss As New String[]
 
   
 
   
+
  percorsoFile = "<FONT color=gray>''/percorso/di/un/file/di/testo''</font>"
  percorsoFile = "''/percorso/di/un/file/di/testo''"
 
 
    
 
    
  ss.Add(percosoFile)
+
  ss.Add(percosoFile)
 
    
 
    
  s = Object.Call(File, "Load", ss)
+
  s = <FONT color=#B22222>Object.Call(File, "Load", ss)</font>
 
   
 
   
  Print s
+
  Print s
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione attuale delle 09:53, 25 dic 2021

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