6

この質問は、このLittle Wonders:Comparer<T>.Defaultから来ています 。著者が行に何を書いたのか疑問に思っています:

比較する型が既に実装されているIComparable<T>場合、またはその型がSystem.Nullable<T>T が実装されている場所である場合、 System.Collections.Generic 名前空間 IComparableに呼び出されるクラスがあり、Default というプロパティを公開します。このプロパティは、の項目の既定の比較子を表すシングルトンを作成します。そのタイプ。Comparer<T>

たとえば、次のようになります。

私はクラスを持っています:

class Foo : IComparable<Foo> { ... }
public class FooComparer : IComparer<Foo> { ... }

として実装された比較クラスpublic abstract class Comparer<T> : IComparer, IComparer<T>。私の質問は、 Default プロパティが全体的にどのように機能するか、それが何をし、どのように機能するかです。

ありがとう

4

1 に答える 1

8

Comparer<T>.DefaultFooComparerクラスを使用しません。内部クラスのインスタンスを返すだけGenericComparer<T>です。このクラスには、そのメソッドへの呼び出しを、渡されたインスタンスのメソッドに単純に委譲できるように、実装する必要
がある制約があります。TIComparable<T>CompareCompare

このようなもの:

internal class GenericComparer<T> : Comparer<T> where T : IComparable<T>
{
    public override int Compare(T x, T y)
    {
        if (x != null)
        {
            if (y != null)
                return x.CompareTo(y);
            return 1;
        }
        else
        {
            if (y != null)
                return -1;
            return 0;
        }
    }

    // ...
}
于 2013-02-19T14:52:24.190 に答える