Cosa fa la parola chiave Call in VB6?

C’è del codice nel nostro progetto che assomiglia un po ‘a questo:

Private Sub Method1() Call InnerMethod End Sub Private Sub Method2() InnerMethod End Sub Private Sub InnerMethod() '' stuff End Sub 

Qual è il vantaggio di eseguire Method1 su Method2?

Da MSDN :

Non è necessario utilizzare la parola chiave Call quando si chiama una procedura. Tuttavia, se si utilizza la parola chiave Call per chiamare una procedura che richiede argomenti, l’elenco di argomenti deve essere racchiuso tra parentesi. Se ometti la parola chiave Call, devi anche omettere le parentesi attorno all’elenco degli argomenti. Se si utilizza la syntax Chiamata per chiamare qualsiasi funzione intrinseca o definita dall’utente, il valore di ritorno della funzione viene scartato.

Per esempio:

 Sub Proc1() Debug.Print "Hello World" End Sub Sub Proc2(text As String) Debug.Print "Hello " & text End Sub 

Nella finestra immediata, se entri

 Proc1 

quindi stampe “Hello World”. Se entri

 Call Proc1 

quindi stampe “Hello World”. Se entri

 Proc2 "World" 

quindi stampe “Hello World”. Se entri

 Call Proc2 "World" 

ottieni un errore di compilazione Dovresti entrare

 Call Proc2("World") 

La chiamata non fa altro che chiamare il metodo. È un periodo di sospensione dai vecchi tempi di Basic quando tutte le linee dovevano iniziare con una parola chiave. “Let” è un’altra di queste parole chiave, che è stata sempre messa prima di un compito, ma non è più necessaria.

Method1 e Method2 fanno esattamente la stessa cosa.

Ho trovato una grande differenza sulla parola chiave ‘call’ con funzioni che hanno, ByRef Arguments (l’ho trovato nell’editor VBA di MS-Access). Se si chiama la funzione senza la parola chiave “Chiama”, gli archi ByRef non verranno impostati per la calle. Per esempio:

 Private Function Test(Optional ByRef refArg As String) As Boolean refArg = "Test" Test = True End Function 

Se chiami la funzione senza la parola chiave Call come

 Dim a As String Test(a) 

a sarà una stringa vuota, dopo il ritorno della chiamata

Se chiami la funzione con la parola chiave Call come

 Dim a As String Call Test(a) 

a contiene la stringa Test

La spiegazione dettagliata fornita nel seguente link: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx

Non c’è alcuna differenza.

Ecco un post che descrive quando è necessario utilizzare call vs non utilizzarlo e quando tra parentesi attorno ai parametri.

Puoi anche leggere ulteriori informazioni sulla chiamata da MSDN. In sostanza, la differenza principale è che quando si utilizza la chiamata per chiamare una funzione non è ansible accedere al valore restituito.