Pergunta

Existem quaisquer usos práticos do TypedReference struct que você realmente usar em código real?

Editar : Os usos do .NET Framework-los em sobrecargas de Console.WriteLine e String.Concat que construir uma matriz de um parâmetro __arglist e passá-lo para a sobrecarga params normais. Por que existem essas sobrecargas?

Foi útil?

Solução

Existem quaisquer usos práticos do struct TypedReference que você realmente usar em código real?

Sim. Eu usá-los se eu precisava de interoperabilidade com métodos variádicos de estilo C.

Por que existem essas sobrecargas?

Eles existem para interoperabilidade com chamadores que gostam de usar métodos variádicos de estilo C.

Outras dicas

Esta parece ser uma questão muito antiga, mas eu gostaria de acrescentar mais um caso de uso: quando você tem um struct e pretende definir sua variável através da reflexão, você sempre operar com o valor em caixa e nunca mudança o original. Esta é inútil:

TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);

// result: fields.MaxValue is still 1234!!

Isto pode ser remediado com o boxe implícita, mas então você solta a segurança de tipos. Em vez disso, você pode corrigir isso com um 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top