Sono abbastanza sicuro che questa è una domanda duplicata, ma non riesco a trovare l'originale (s).Collegamento di meta-informazioni a un oggetto in .NET
Ricevo alcuni oggetti a cui devo "allegare" alcune informazioni. Fondamentalmente, se quell'oggetto ritorna sempre allo stesso pezzo di codice, ho bisogno di vedere che l'ho visto prima.
ie. qualcosa di simile:
Dictionary<WeakReference<ObjectType>, string> _Cache;
Annotare il riferimento debole in là (lo so WeakReference non è generica btw), ho bisogno di fare la chiave della cache un riferimento debole, per gestire il fatto che gli oggetti sono GC' fuori dal mio controllo
Ora, posso rendere quella cache piena di riferimenti deboli, ma mi sembra di ricordare un tipo simile di sistema già esistente in .NET, che è stato GC automaticamente accanto all'oggetto.
Nota che non ricordo il sovraccarico di questo, quindi mi assicurerò di leggere sull'argomento prima di decidere se questa è una soluzione buona/migliore della mia cache. Sfortunatamente non posso cambiare l'oggetto in questione, quindi ho bisogno di tenere traccia di questa meta-informazione da qualche altra parte.
miei limiti:
- L'oggetto non è mio, quindi non può cambiare in ogni modo possibile
- non posso ereditare dalla oggetto, in quanto è sigillato, inoltre, sono data gli oggetti, io non li costruisco, quindi dovrei essere in grado di sostituire un'istanza con un nuovo oggetto di tipo discendente perché sia utile
- Gli oggetti sono fuori controllo dal mio controllo, quindi io non si può semplicemente usare un dizionario, che si riempirà lentamente, sia con "riferimenti" a oggetti inesistenti, sia con hol d sugli oggetti, avrei bisogno di un dizionario con una chiave di riferimento debole (quindi: dizionario personalizzato)
- Gli oggetti, anche se potrei incapsularli nel mio codice personale e quindi portare con sé le informazioni richieste, sono passati a un quadro fuori dal mio controllo, e restituito a me dalla stessa, e quindi ho bisogno di essere in grado di recuperare/cercare il vecchio informazioni con appena l'oggetto in questione
in sostanza, qualcosa di simile:
PropertyAttacher.Attach(instance, "Name", name);
Mi ricordo correttamente? Quali sono le classi coinvolte?
Tale questione non è rilevante qui, anche se il problema sembra simile, la risposta accettata qui cita utilizzando un attributo, o alterare il tipo (o discendente da esso), né di cui posso fare –
Informazioni su ConditionalWeakTable (http://msdn.microsoft.com/en-us/library/dd287757.aspx)? –
@Simon Grazie, era esattamente quello che stavo cercando. Se lo lasci come risposta, lo accetterò. –