Estoy escribiendo una pequeña aplicación de tejido IL utilizando Mono.Cecil, que requiere que manipule el conjunto de destino en un nivel IL.IL: ldfld vs ldflda
Mi pregunta es bastante simple, pero todavía encuentro el asunto muy confuso. ¿Cuál es la diferencia práctica entre las instrucciones ldfld
y ldflda
?
He consultado con msdn, y parece que mientras ldfld
obtiene el valor del campo, ldflda
obtiene la dirección del campo. Está bien ... pero ¿qué significa esto? Primero pensé que el primero se usa para los tipos de valor (y cadena), y el último para los tipos de referencia, pero he compilado un fragmento de C# y lo he comprobado en Reflector, y me ha demostrado que estaba equivocado.
no he podido encontrar ningún patrón distinto de cuando el compilador de C# ldflda
emite en lugar de ldfld
, y mis búsquedas no reveló ninguno de los artículos que explicarían esto. Entonces, ¿cuándo usar ldflda
en lugar de ldfld
?
Cualquier ayuda sería muy apreciada.
Desde su descripción sospecho que utiliza ldflda si necesita pasar la variable a un parámetro ref, llamar a un método o asignarlo. – CodesInChaos