1

自分のメソッドを定義する必要があるときは、通常、クラスEqualsでオーバーライドするだけです。Equals(Object)

ただし、 MSDNによると:

また、パフォーマンスを向上させるために、Equals(object)の実装に加えて、どのクラスも独自のタイプのEquals(type)を実装することをお勧めします。

しかし、どのようにパフォーマンスを向上させることができますか?私はこれらの2つのメソッドのうちの1つしか呼び出すことができませんね。

4

1 に答える 1

7

構造体のボクシングはなく、(仮想呼び出しの代わりに)すべてのタイプの直接呼び出しの可能性があります。

struct MyStruct
{
  public int v;
  public override bool Equals(Object other) {}
}

MyStructを使用する明示的なメソッドを提供しない場合、MyStructを呼び出すたびにボックス化する必要がありますmyFirst.Equals(myOther)。提供するEquals(MyStruct other)場合、コンパイラは代わりにそのメソッドをより一般的に選択するEquals(Object)ため、構造体のボックス化を回避します。

Equals(MyType)すべてのタイプについて、タイプをすでに知っているので、非常に簡単な実装を提供できます。また、コンパイラ/ JITは、メソッドが仮想でない場合、より具体的なバージョンが仮想である必要がないため、呼び出しをより適切に最適化できる可能性があります。

于 2012-09-28T04:03:08.403 に答える