私はインターフェイスを持っているので、IInterfaceと呼ぶことができます。C#の2つのインターフェイスインスタンス間の値の等価性をテストしますか?
public interface IInterface : IEquatable<IInterface>
{
string Name { get; set; }
int Number { get; }
Task<bool> Update();
}
次に、実装でインターフェイスを実装しようとします。
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);
}
私はに実行しています問題はセッターである:
public IInterface MyIntf
{
get { return _myIntf; }
set
{
if (_myIntf == value) { return; }
_myIntf = value;
}
インテリセンスが平等テストが参照のみをテストし、左と右のオブジェクトの両方を処理していることを示しています。これは、==(IInterface left、IInterface right)の演算子オーバーロードがないからです。もちろん、私は実際にその関数を実装することはできません。なぜなら、==は実装クラスの型に一致する辺の1つを必要とするからです。どのようにして、2つのインタフェースが互いに同等かどうかを正しく確認できるかどうかを正しく確認するにはどうすればよいですか?
アップデートでは、インターフェイスのために==を実装することはできません、それを手に入れました。私は等しいを使用します。みんな、ありがとう。
インターフェイスに==演算子オーバーロードを実装することはできますか? – bodangly
ヌル伝播演算子では、より短い方法です: '_myIntf?.Equals(value)??偽 " –
@bodanglyいいえ、できません。この質問を参照してください:http://stackoverflow.com/questions/5066281/can-i-overover-an-operator-on-an-interface –