2012-04-25 2 views
7

Dlaczego nie mogę zadeklarować domyślnych argumentów dla funkcji składowych zarządzanego typu lub funkcji ogólnych? C# 4.0 wprowadzono Named and Optional Arguments; jest podobna rzecz dla CLI?Argumenty opcjonalne C++/CLI

Nie rozumiem, dlaczego nie można zadeklarować metodę tak:

void Optional(int argument = 0); 

A potem, gdy zgłoszę Optional(); kompilator nie nie przekłada to wezwanie do: Optional(0);.

Odpowiedz

8

Wygląda na to, że kompilator C++/CLI nie wysyła do tego poprawnej dyrektywy IL. Nie wysyła dyrektywy .param [1] = int32(0), której C# używa do rozpoznawania parametrów domyślnych. Jeśli otworzysz wygenerowany zespół w ILDasm, zobaczysz go.

sposób, że kompiluje byłoby użyć atrybutów Optional i DefaultParameterValue od nazw System::Runtime::InteropServices, ale C# nie używa tych parametrów domyślnych, więc obecnie nie ma łatwy sposób wokół tworzenia przeciążenie.

można znaleźć pytanie z prośbą o te atrybuty tutaj: https://stackoverflow.com/a/4974528/93652

+0

więc kompilator C++/CLI nie wie jak generować dyrektywy. Mam nadzieję, że przy VS (12?) Problem zostanie rozwiązany. – gliderkite

+0

Mam też nadzieję. Co ciekawe wydaje się, że języki radzą sobie z tym inaczej. Słyszałem, że VB.Net robi to za pomocą Atrybutów. Sądzę więc, że najlepiej byłoby, gdyby wygenerowano oba atrybuty i dyrektywę. – Botz3000