c# - Usos prácticos de TypedReference
.net (2)
¿Hay algún uso práctico de la estructura TypedReference que realmente usaría en código real?
Sí. Los usaría si necesitara interoperabilidad con los métodos variadic de estilo C.
¿Por qué existen estas sobrecargas?
Existen para la interoperabilidad con personas que llaman que les gusta usar métodos variadic de estilo C.
¿Hay algún uso práctico de la estructura TypedReference
que realmente usaría en código real?
EDITAR : El marco .Net los usa en sobrecargas de Console.WriteLine
y String.Concat
que crean una matriz a partir de un parámetro __arglist
y la pasan a la sobrecarga de params
normales. ¿Por qué existen estas sobrecargas?
Esta parece ser una pregunta muy antigua, pero me gustaría agregar un caso de uso más: cuando tiene una estructura y desea establecer su variable a través de la reflexión, siempre operará en el valor en caja 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 el tipo de seguridad. En su lugar, puedes arreglar 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!!