usi pratici di TypedReference
-
19-09-2019 - |
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?
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!!