usos prácticos de TypedReference
-
19-09-2019 - |
Pregunta
¿Hay usos prácticos de la TypedReference
estructura que se usaría en realidad en código real?
editar : El marco .Net los utiliza en sobrecargas de Console.WriteLine
y String.Concat
que construyen una matriz desde un parámetro __arglist
y pasarlo a la sobrecarga params
normal. ¿Por qué existen estas sobrecargas?
Solución
¿Hay usos prácticos de la estructura TypedReference en que se usan actualmente en código real?
Sí. Que haría uso de ellos si necesitaba interoperabilidad con métodos variadic estilo C.
¿Por qué existen estas sobrecargas?
Existen para la interoperabilidad con las personas que llaman que les gusta usar métodos variadic estilo C.
Otros consejos
Esto parece ser una pregunta muy antigua, pero me gustaría añadir una más de casos de uso: cuando se tiene una estructura y desea establecer su variable a través de la reflexión, siempre se operaría sobre el valor en caja y nunca cambian 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 puede remediarse con el boxeo implícita, pero luego se suelta la seguridad de tipos. En su lugar, se puede solucionar este problema 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!!