C# imiter overridding de l'opérateur d'affectation (=)

J'ai eu un petit problème avec un quelque chose de simple classe wrapper j'ai.

Il ressemble à quelque chose comme ceci:

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;
  }
}

J'ai remplacé l'implicite convertisseurs de et de T, de sorte qu'il se comporte presque comme une instance de T lui-même.

par exemple

Wrapper<int> foo = 42;

Cependant j'ai un léger problème lors de l'affectation d'une instance de Wrapper à un autre, car je ne veux affecter la valeur de la deuxième classe Wrapper.

Donc, pour l'instant, je dois faire ceci:

Wrapper<int> foo = 42;
Wrapper<int> bar = (int)foo;

Ou exposer _value du public par le biais d'une propriété.

Cependant, comme c'est dans une bibliothèque, et je ne veux pas que l'utilisateur dépendent de me souvenant de cela, avez-vous une idée de comment je pourrait imiter overridding de l'opérateur d'affectation ?

Le problème en changeant juste le pointeur (comme il le fait lors de l'affectation d'une instance de classe à l'autre), c'est que j'ai un dictionnaire de pointeurs vers ces objets wrappers, donc je ne peux pas les avoir en changeant tout le temps, depuis le dictionnaire serait cesser d'appariement ensuite.

Je peux voir si c'est un peu déroutant, donc si j'ai oublié quelque chose d'important, n'hésitez pas à demander 🙂

était-ce jamais résolu? j'ai un problème similaire - sauf que je suis entrain de créer quelque chose pour envelopper les types de base par exemple, float et que vous voulez être en mesure de faire MyType< float > a = 1; a = 2f; sans la création d'une nouvelle instance de... faire des références vraiment mis à jour par magie? je voudrais juste essayer, mais je ne suis pas convaincu que c'est une bonne expérience parce que si cela fonctionne, il pourrait être aveugle chance pour tout ce que je sais...

OriginalL'auteur | 2009-03-13