J'ai donc une interface, appelons ça IInterface. Puis j'essaye d'implémenter l'interface dans l'implémentation. Ensuite, j'essaie de mettre en œuvre l'interface.Test de l'égalité des valeurs entre deux instances d'interface dans C#?
public bool Equals(IInterface other)
{
if (other == null) return false;
return (this.Name.Equals(other.Name) && this.Number.Equals(other.Number));
}
public override int GetHashCode()
{
return this.Number.GetHashCode();
}
public override bool Equals(object obj)
{
var other = obj as IInterface ;
return other != null && Equals(other);
}
public static bool operator ==(Implementation left, IInterface right)
{
if (ReferenceEquals(left, right)) return true;
if (ReferenceEquals(left, null)) return false;
return left.Equals(right);
}
public static bool operator !=(Implementation left, IInterface right)
{
return !(left == right);
}
Le problème que je courais en est dans un setter:
public IInterface MyIntf
{
get { return _myIntf; }
set
{
if (_myIntf == value) { return; }
_myIntf = value;
}
IntelliSense montre que le test d'égalité, il teste les références seulement et traiter à la fois gauche et à droite comme des objets. Je suppose que c'est parce qu'il n'y a pas de surcharge de l'opérateur pour == (IInterface à gauche, IInterface à droite). Bien sûr, je ne peux pas vraiment implémenter cette fonction parce que == nécessite que l'un des côtés corresponde au type de la classe d'implémentation. Comment s'assure-t-on correctement que deux interfaces peuvent être vérifiées pour l'égalité les unes par rapport aux autres?
Mise à jour
obtenu, vous ne pouvez pas implémenter == pour une interface. J'utiliserai Equals. Merci tout le monde.
Est-il possible d'implémenter une surcharge == opérateur pour une interface? – bodangly
Un chemin plus court avec l'opérateur de propagation nulle: '_myIntf? .Equals (value) ?? false –
@bodangly Non, vous ne pouvez pas. Voir cette question: http://stackoverflow.com/questions/5066281/can-i-overload-an-operator-on-an-interface –