自分のメソッドを定義する必要があるときは、通常、クラスEquals
でオーバーライドするだけです。Equals(Object)
ただし、 MSDNによると:
また、パフォーマンスを向上させるために、Equals(object)の実装に加えて、どのクラスも独自のタイプのEquals(type)を実装することをお勧めします。
しかし、どのようにパフォーマンスを向上させることができますか?私はこれらの2つのメソッドのうちの1つしか呼び出すことができませんね。
自分のメソッドを定義する必要があるときは、通常、クラスEquals
でオーバーライドするだけです。Equals(Object)
ただし、 MSDNによると:
また、パフォーマンスを向上させるために、Equals(object)の実装に加えて、どのクラスも独自のタイプのEquals(type)を実装することをお勧めします。
しかし、どのようにパフォーマンスを向上させることができますか?私はこれらの2つのメソッドのうちの1つしか呼び出すことができませんね。
構造体のボクシングはなく、(仮想呼び出しの代わりに)すべてのタイプの直接呼び出しの可能性があります。
struct MyStruct
{
public int v;
public override bool Equals(Object other) {}
}
MyStructを使用する明示的なメソッドを提供しない場合、MyStructを呼び出すたびにボックス化する必要がありますmyFirst.Equals(myOther)
。提供するEquals(MyStruct other)
場合、コンパイラは代わりにそのメソッドをより一般的に選択するEquals(Object)
ため、構造体のボックス化を回避します。
Equals(MyType)
すべてのタイプについて、タイプをすでに知っているので、非常に簡単な実装を提供できます。また、コンパイラ/ JITは、メソッドが仮想でない場合、より具体的なバージョンが仮想である必要がないため、呼び出しをより適切に最適化できる可能性があります。