演算子オーバーロード
今日、初めて==演算子をオーバーロードする必要が生じて、実装してみたんやけど結構めんどくさい。
==演算子をオーバーロードするためにはまず、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; }
めったに使うことはないけど、知っといて損はない。