2012-04-25 30 views
7

¿Por qué no puedo declarar los argumentos predeterminados para funciones miembro de un tipo gestionado o funciones genéricas? C# 4.0 introducido Named and Optional Arguments; hay algo similar para CLI?Argumentos opcionales de C++/CLI

No entiendo por qué no es posible declarar un método como este:

void Optional(int argument = 0); 

Y luego cuando llamo Optional(); El compilador no traducir esta llamada en: Optional(0);.

Respuesta

8

Parece que el compilador C++/CLI no emite la directiva IL correcta para eso. No emite la directiva .param [1] = int32(0), que C# usa para reconocer los parámetros predeterminados. Si abre el ensamblaje generado en ILDasm, lo verá.

Una forma que compila sería utilizar los atributos Optional y DefaultParameterValue del System::Runtime::InteropServices espacio de nombres, pero C# no utiliza los de parámetros por defecto, por lo que actualmente no hay manera fácil de evitar la creación de una sobrecarga.

Usted puede encontrar la formulación de preguntas acerca de estos atributos aquí: https://stackoverflow.com/a/4974528/93652

+0

Así que el compilador de C++/CLI no sabe cómo generar la directiva. Espero que con VS (12?) El problema se resuelva. – gliderkite

+0

Espero que sí, también. Curiosamente, parece que los idiomas manejan esto de manera diferente. Escuché que VB.Net lo hace usando los Atributos. Así que supongo que sería mejor si se generaran ambos atributos y la directiva. – Botz3000

Cuestiones relacionadas