Parece ser una pregunta muy antigua, pero me gustaría añadir un caso de uso más: cuando tiene una estructura y desea establecer su variable a través de la reflexión, siempre operaría en el valor encuadrado y nunca cambiar el original Esto es inútil:
TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);
// result: fields.MaxValue is still 1234!!
Esto se puede remediar con el boxeo implícito, pero luego se pierde la seguridad del tipo. En su lugar, puede solucionar esto con un TypedParameter
:
TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = fields.GetType().GetField("MaxValue");
TypedReference reference = __makeref(fields);
info.SetValueDirect(reference, 4096);
// result: fields.MaxValue is now indeed 4096!!
¿Por qué no es constructivo? : o – nawfal
También vea http://stackoverflow.com/questions/4764573/why-is-typedreference-behind-the-scenes-its-so-fast-and-safe-almost-magical – nawfal
También puede usarlo para aprobar apilar la ubicación/referencia de variable "alrededor" (por ejemplo, a otro hilo o devolverlo del método). Requiere código inseguro y "copiar" TypedReference como dos IntPtr. –