Domanda

Ci sono usi pratici della TypedReference struct che si sarebbe effettivamente utilizzare nel codice reale?

modifica : Il quadro Net uso sia sovraccarichi di Console.WriteLine e String.Concat che costruire una matrice da un parametro __arglist e passarlo al sovraccarico params normale. Perché esistono questi sovraccarichi?

È stato utile?

Soluzione

  

Ci sono usi pratici della struct TypedReference che si sarebbe effettivamente utilizzare nel codice reale?

Sì. Io li userei se avevo bisogno di interoperabilità con i metodi variadic C-stile.

  

Perché esistono questi sovraccarichi?

Essi esistono per l'interoperabilità con i chiamanti che amano usare i metodi variadic C-stile.

Altri suggerimenti

Questo sembra essere una domanda molto vecchio, ma vorrei aggiungere più un caso d'uso: quando si dispone di una struttura e si desidera impostare la sua variabile attraverso la riflessione, si dovrebbe sempre operare sul valore boxed e non cambiano mai l'originale. Questo è inutile:

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

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

Questo può essere risolto con la boxe implicita, ma poi si perde la sicurezza di tipo. Invece, è possibile risolvere questo 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!!
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top