演算子オーバーロード

今日、初めて==演算子オーバーロードする必要が生じて、実装してみたんやけど結構めんどくさい。
==演算子オーバーロードするためにはまず、Equalsメソッドをオーバーライドする。

public override bool Equals(object obj) {
    return false;
}

Equalsメソッドをオーバーライドすれば必然的にGetHashCodeメソッドもオーバーライドする必要がある。

public override int GetHashCode() {
    return base.GetHashCode()
}

これで==演算子オーバーロードする準備ができた。
シグネチャはこんなん。

public static bool operator ==(Hoge obj1, Hoge obj2) {
    return false;
}

これで終わりかと思ったらコンパイラに!=演算子オーバーロードする必要があると怒られた。
まぁ、相反する演算子を定義しないと矛盾するので仕方ないのかな。

public static bool operator !=(Hoge obj1, Hoge obj2) {
    return false;
}

めったに使うことはないけど、知っといて損はない。