Simile a this, ma con una svolta.I parametri VB opzionali sono obbligatori in C#
VB dichiarazione di funzione:
Public Shared Function MyFunc(ByVal Name As String, ByVal Num As Integer, Optional ByRef obj As Object = Nothing, Optional ByVal val As Integer = 0) As Boolean
Quando si chiama in C# (soluzione diversa, ho copiato il .dll
)
Errore 164 Nessun sovraccarico per il metodo 'MyFunc' prende 2 argomenti
I metadati mostrano la funzione da:
public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);
Perché uno Optional
è riuscito a passare mentre l'altro no?
Per curiosità, ho scambiato l'ordine degli ultimi due parametri, il progetto C# non ha avuto un problema ad accettare che, pur i metadati erano 'public static bool MyFunc (string Name, int Num, int val = 0, ref object obj);' che è illegale. Quando ho provato a passare 2 parametri ho ottenuto il messaggio "Nessun sovraccarico ... richiede 2 argomenti". Quando ho provato a passare 3 parametri ho ottenuto il messaggio "Nessun sovraccarico ... richiede 3 argomenti". Interessante. – JNF
@JNF: I metadati che stai mostrando sono solo una rappresentazione * C * di tutto ciò che c'è nell'IL. Sospetto che anche i veri metadati per la versione originale andassero bene - è solo che qualunque cosa tu stia usando per tradurre i metadati in C# non ha funzionato. Tuttavia, non cambierei solo l'ordine dei parametri: se ciò dovesse funzionare ora, non è garantito che lo farà in futuro. Modificherei la firma in qualcosa che è anche rappresentabile in C#. –
no, beh, quello ero solo io che interpretavo Curious George. Ho finito per sovraccaricare nel VB. – JNF