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?

¿Fue útil?

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!!
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top