Podobna do this, ale z niespodzianką.Opcjonalne parametry VB są wymagane w języku C#
VB deklaracja funkcji:
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
Dzwoniąc w języku C# (inne rozwiązanie, skopiowane przez .dll
)
Error 164 Nie przeciążenie dla metody 'myFunc' trwa 2 argumenty
Metadane pokazuje funkcję, która ma być:
public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);
Dlaczego jeden Optional
przetrwał, a drugi nie?
Z ciekawości, ja zamieniłem kolejność dwóch ostatnich parametrów, projekt C# nie ma problemu przyjmując, że choć metadane to 'public static bool MyFunc (string Name, int Num, int val = 0, ref object obj);' który jest nielegalny. Podczas próby przekazania 2 parametrów otrzymałem komunikat "Brak przeciążenia ... trwa 2 argumenty". Podczas próby przekazania 3 parametrów otrzymałem komunikat "Brak przeciążenia ... trwa 3 argumenty". Ciekawy. – JNF
@JNF: Wyświetlane metadane to tylko reprezentacja C# * tego, co jest w IL. Podejrzewam, że prawdziwe metadane oryginalnej wersji też były w porządku - po prostu to, czego używasz do przetłumaczenia tych metadanych na C#, nie wyszło, co robić. Nie zmieniałbym jednak po prostu kolejności parametrów - jeśli to zadziała, teraz nie ma gwarancji, że tak będzie w przyszłości. Zmieniłbym podpis na coś, co jest również reprezentowalne w C#. –
nie, cóż, tylko ja grałem w Curiousa George'a. Skończyło się na przeciążeniu w VB. – JNF