2011-02-10 11 views
20

Si tengo:C# - son parámetros dinámicos en caja

void Foo(dynamic X) { 
} 

Y luego:

Foo(12); 

Would 12 consigue en caja? No me puedo imaginar que lo haría, solo me gustaría preguntar a los expertos.

+2

¿Por qué te imaginas que no? ¿Cómo imagina que el tiempo de ejecución almacena un valor de * tipo de tiempo de compilación desconocido * si no es como un objeto? (Esta no es una pregunta retórica, estoy interesado en aprender por qué las intuiciones de las personas los llevan a creer cosas falsas sobre las características del lenguaje para que podamos intentar diseñar mejores características en el futuro). –

+0

¿Estás en el equipo de C#? No fue una suposición justificada de mi parte. Con todas las características increíblemente geniales que se han agregado a C#, es fácil olvidar a veces que C# sigue siendo un lenguaje estáticamente tipado, así que ¿cómo podría * no * ser un objeto oculto? Si estás en el equipo C#, entonces gracias por las expresiones lambda. La mejor función de idioma de todos los tiempos. –

+2

@ Adam: De nada. Disfruté mucho la implementación de expresiones lambda y me alegra que estés disfrutando de usarlas. –

Respuesta

14

Sí, lo hará.

Debajo del capó, un tipo dynamic es solo un object con algunos metadatos, por lo que los tipos de valor se incluirán en cuadros cuando se coloquen en una variable, campo o parámetro del tipo dynamic.

El método en realidad será compilado como esto:

void Foo([Dynamic] object X) 
{ 
} 

leer más sobre el DynamicAttribute here.

IL para el código llamándolo:

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 
    .maxstack 8 
    L_0000: nop 
    L_0001: ldc.i4.s 12 
    L_0003: box int32 
    L_0008: call void ConsoleApplication13.Program::Foo(object) 
    L_000d: nop 
    L_000e: ret 
} 
+0

Tuve la sensación de que esa sería la respuesta. Gracias. –

1

Sí. Un tipo de valor debe estar encuadrado para escribir check.

0

Sí!

Dado que es un tipo de valor, estará en caja.

Cuestiones relacionadas