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.