次のように Equals() をオーバーライドする「x」という名前のクラスがあります。
public override bool Equals(object obj)
{
if(obj is x)
{
return ((obj as x).key == this.key);
}
return false;
}
次の拡張メソッドが比較のために上記のオーバーライドを使用しようとすると、Equals() は使用されません。
public static bool Contains(this HashSet<x> set, char key)
{
x SearchKey = new x(key);
return set.Contains(SearchKey);
}
次のように、extensio メソッドの最初の行を変更した場合にのみ、期待どおりの動作が得られます。
x SearchKey = new x(key);
この振る舞いを説明していただけますか?
オブジェクトのサブセットであるため、Equals() は x 自体のインスタンスに対して呼び出されると予想していました。私は何が欠けていますか?