4

私の友人は、String.csの2つのメソッドの興味深いソースコードに出くわしました。

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool operator ==(string a, string b)
{
    return Equals(a, b); 
}

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool Equals(string a, string b)
{
    return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}

なぜ無限ループにならないのですか?(そして、すべてのプログラムはStackOverflowExceptionによって終了します!)

4

2 に答える 2

0

どうやらそう、少なくとも受け入れられた答えによれば。

(Hooray SOの担当者がある程度いるまで、コメントを残すことはできません。)

于 2012-06-07T03:39:06.277 に答える
0

あなたはそれにShoaibに私を打ち負かしました。あなたの答えが投稿されたとき、私は私の最初に答えた質問も入れようとしていました。:)

欠落しているのは「オブジェクト」へのキャストであるように思われます。これにより、コンパイラはObjectからEqualsメソッドを使用するように強制され、無限ループが防止されます。

于 2012-06-07T03:44:32.277 に答える