Ho un po 'di problemi con una classe wrapper un po' semplice che ho.C# imita l'overrideing dell'operatore di assegnazione (=)
Sembra qualcosa di simile a questo:
public class Wrapper<T>
{
private T _value;
public Wrapper<T>(T value)
{
_value = value;
}
public static implicit operator Wrapper<T>(T value)
{
return new Wrapper<T>(value);
}
public static implicit operator T(Wrapper<T> value)
{
return value._value;
}
}
ho sovrascritto i convertitori impliciti da e verso T, in modo che si comporta quasi come l'istanza di T stessa.
ad es.
Wrapper<int> foo = 42;
Comunque io ho un piccolo problema durante l'assegnazione di un'istanza di Wrapper ad un altro, dal momento voglio solo assegnare il valore della seconda classe wrapper.
Così adesso, devo fare questo:
Wrapper<int> foo = 42;
Wrapper<int> bar = (int)foo;
o esporre _value pubblicamente attraverso una proprietà.
Tuttavia, poiché questo è in una libreria e non voglio che l'utente dipenda dal ricordare questo, avete qualche idea su come potrei imitare l'overriding dell'operatore di assegnazione?
Il problema con la semplice modifica del puntatore (come quando si assegna un'istanza di classe a un altro), è che ho un dizionario di puntatori a questi oggetti Wrapper, quindi non posso cambiarli tutto il tempo, il dizionario smetterebbe di corrispondere quindi.
posso vedere se questo è un po 'confusa, quindi se ho lasciato qualcosa di importante fuori, non esitate a chiedere :-)
è stato mai risolto? Ho un problema simile - tranne che sto creando qualcosa per avvolgere i tipi di base, ad es. fluttuare e voler essere in grado di eseguire MyType < float > a = 1f; a = 2f; senza creare una nuova istanza ... i riferimenti vengono davvero aggiornati con la magia? Vorrei solo provare ma non sono convinto che sia un buon esperimento perché se funziona potrebbe essere cieca fortuna per tutto quello che so ... – jheriko