2012-04-25 13 views
7

Perché non è possibile dichiarare argomenti predefiniti per funzioni membro di un tipo gestito o di funzioni generiche? C# 4.0 introdotto Named and Optional Arguments; c'è una cosa simile per CLI?Argomenti opzionali C++/CLI

Non capisco il motivo per cui non è possibile dichiarare un metodo come questo:

void Optional(int argument = 0); 

E poi quando chiamo Optional(); il compilatore non traduco questa chiamata in: Optional(0);.

risposta

8

Sembra che il compilatore C++/CLI non emetta la direttiva IL corretta per quello. Non emette la direttiva .param [1] = int32(0), che C# utilizza per riconoscere i parametri predefiniti. Se apri l'assembly generato in ILDasm, lo vedrai.

Un modo che compila sarebbe quella di utilizzare gli attributi Optional e DefaultParameterValue dal System::Runtime::InteropServices spazio dei nomi, ma C# non utilizza quelle per i parametri di default, quindi attualmente non c'è un modo semplice intorno creando un sovraccarico.

È possibile trovare la domanda chiedendo di quegli attributi qui: https://stackoverflow.com/a/4974528/93652

+0

Quindi il compilatore C++/CLI non sa come generare la direttiva. Spero che con VS (12?) Il problema verrà risolto. – gliderkite

+0

Lo spero anch'io. È interessante notare come le lingue gestiscano diversamente. Ho sentito VB.Net farlo utilizzando gli attributi. Quindi penso che sarebbe meglio se fossero generati sia gli attributi che la direttiva. – Botz3000